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

san*_*re6 6 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/ {

    }    
}
Run Code Online (Sandbox Code Playgroud)

现在我必须从另一个 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/;
        }    
Run Code Online (Sandbox Code Playgroud)

当我从 server2 访问应用程序时,我收到如下错误,例如当我访问http://server2.com/app/css/app.css 时 (抱歉没有代表发布链接)

[错误] 6601#0: *1 open() "/data/www/app/css/app.css" failed (2: No such file or directory)

并且 server1 日志中没有错误。当我将其设置为反向代理到 server1 时,为什么 nginx 会在 server2 中查找静态文件,同样的设置在 apache 中工作正常

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

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

我错过了什么?

Mat*_*man 0

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