我有一台Nginx服务器托管一个Web应用程序,当直接访问该应用程序时可以正常工作。其配置如下
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/; } }
当我从server2访问该应用程序时,出现以下错误,例如当我访问http:server2.com/app/css/app.css时
[错误] 6601#0:* 1 open()“ /data/www/app/css/app.css”失败(2:没有此类文件或目录)
并且serv er1日志中没有错误。当我将它设置为反向代理到server1时,nginx为什么要在server2中寻找静态文件?
ProxyPass / app / http:server1:8000 / app /
ProxyPassReverse / app / http:server1:8000 / app /
我想念什么?
您有location
与您的请求匹配的正则表达式,/app/css/app.css
并拦截了来自代理的请求。这就是regexp location
的工作方式。为防止^~
在您的应用位置使用此use 修饰符,请执行以下操作:
location ^~ /app/ { proxy_pass ...; }
这将阻止正则表达式location
匹配。
文档:http : //nginx.org/r/location