Reputation: 807
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
Reputation: 14344
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
Upvotes: 6