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

时间:2014-06-05 05:48:40

标签: nginx reverse-proxy

我有一个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:没有这样的文件或目录)

并且在服务器er1日志中没有错误。为什么nginx在server2中寻找静态文件时我将其设置为反向代理到server1相同的设置在apache中正常工作

  

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

     

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

我缺少什么?

1 个答案:

答案 0 :(得分:4)

您的regexp location与您的请求/app/css/app.css匹配,并拦截来自代理的请求。这就是regexp location的工作原理。要防止这种情况,请为您的应用位置使用^~修饰符:

location ^~ /app/ {
    proxy_pass ...;
}

这会阻止正则表达式location匹配。

文档:http://nginx.org/r/location