我有一个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打开()“/ data / www / app / css / app.css”失败(2:没有这样的文件或目录)
并且在服务器er1日志中没有错误 . 为什么nginx在server2中寻找静态文件时我将其设置为反向代理到server1相同的设置在apache中工作正常
ProxyPass / app / http:server1:8000 / app / ProxyPassReverse / app / http:server1:8000 / app /
我错过了什么?
1 回答
你有regexp
location
匹配你的请求/app/css/app.css
并拦截来自代理的请求 . 这就是regexplocation
的工作方式 . 要防止这种情况,请为您的应用位置使用^~
修饰符:这将阻止regexp
location
匹配 .文件:http://nginx.org/r/location