我有一个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; }