sanre6
sanre6

Reputation: 807

Nginx reverse proxy to another nginx server serving static files

I have an Nginx server hosting a web app which works fine when directly accessed. Its config is below

server {
    listen 8000 default_server;

    listen [::]:8000 default_server ipv6only=on;

    root /data/www/ ;
    server_name server1.com;

    location / {
        try_files $uri $uri/ =404;
    }

    location /app/ {

    }   
}

Now i have to serve this app from another Nginx server So i setup the reverse proxy like below

server {
    listen 80 default_server;

    listen [::]:80 default_server ipv6only=on;

    root /data/www/ ;
    server_name server2.com;

    location / {
        try_files $uri $uri/ =404;
    }

    location /app/ {
        proxy_pass http://server1.com:8000/app/;
    }
}   

When i access the app from server2 i am getting errors like below for example when i am accessing http: server2.com/app/css/app.css

[error] 6601#0: *1 open() "/data/www/app/css/app.css" failed (2: No such file or directory)

and no errors in serv er1 logs. Why is nginx looking for static files in server2 when i have set it to reverse proxy to server1 same setup works fine in apache with

ProxyPass /app/ http:server1:8000/app/

ProxyPassReverse /app/ http:server1:8000/app/

What am i missing ?

Upvotes: 3

Views: 8001

Answers (1)

Alexey Ten
Alexey Ten

Reputation: 14344

You have regexp location that matches your request /app/css/app.css and intercepts request from proxy. That's how regexp locations works. To prevent this use ^~ modifier for your app location:

location ^~ /app/ {
    proxy_pass ...;
}

This will prevent regexp location from matching.

Documentation: http://nginx.org/r/location

Upvotes: 6

Related Questions