Nginx reverse proxy to another nginx server serving static files

nginx, reverse-proxy

Solution

You have regexp `location` that matches your request `/app/css/app.css` and intercepts request from proxy. That's how regexp `location`s 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

Problem

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 ?

Original source