Nginx反向代理到另一个服务于静态文件的nginx服务器

我有一个Nginx服务器托pipe一个Web应用程序,直接访问时工作正常。 它的configuration如下

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/ { } } 

现在我必须从另一个Nginx服务器来服务这个应用程序所以我设置了如下的反向代理

 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/; } 

当我从服务器2访问应用程序时,我得到像下面的错误例如,当我访问http://server2.com/app/css/app.css (对不起,没有代表张贴链接)

[错误] 6601#0:* 1 open()“/data/www/app/css/app.css”失败(2:没有这样的文件或目录)

并在server1日志中没有错误。 为什么nginx在server2中寻找静态文件时,我已经把它设置为反向代理服务器1相同的设置工作正常在Apache

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

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

我错过了什么?

问题是你试图在本地提供文件的第二个nginx实例:

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

只要删除整个事情,如果你想使用http://server2.com/app/服务。 如果您想要使用http://server2.com/ ,请更新configuration以反映:

  listen [::]:80 default_server ipv6only=on; server_name server2.com; location / { proxy_pass http://server1.com:8000/app/; } 

尝试在更通用/位置之前/之上放置代理中更具体的/app/位置,因为nginx可能以您不打算的方式处理位置规则。

您通常不需要将path添加到nginx!

该位置的path会自动添加

所以这

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

应该是:

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