Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

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 (sorry no rep to post links)

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

and no errors in server1 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 ?

share|improve this question

2 Answers 2

Try putting the more specific /app/ location in your proxy before/above the more generic / location, as nginx may be handling the location rules in a way you didn't intend.

share|improve this answer
    
that did not help but the config in server2 location ~* \.(css|js)$ { expires 365d; } for browser caching was causing the issue thanks for your response –  sanre6 Jun 5 at 6:45

You generally don't need to add the path to nginx!

The path from the location gets added automatically

so this

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

should really be:

 location /app/ {
      proxy_pass http://server1.com:8000;
}
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.