【问题标题】:Nginx reverse proxy to another nginx server serving static filesNginx 反向代理到另一个提供静态文件的 nginx 服务器
【发布时间】:2014-07-25 23:50:55
【问题描述】:

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

[error] 6601#0: *1 open() "/data/www/app/css/app.css" 失败(2: 没有这样的文件或目录)

并且 server1 日志中没有错误。当我将 nginx 设置为反向代理到 server1 时,为什么 nginx 在 server2 中寻找静态文件,相同的设置在 apache 中运行良好

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

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

我错过了什么?

【问题讨论】:

  • 我很确定,你没有发布完整的配置。提供server2的完整配置
  • 除了浏览器缓存之外别无其他,比如 location ~* \.(css|js)$ { expires 365d; }
  • 这个位置与您的/app/css/app.css 完全匹配,并防止代理到 server1
  • 感谢 alexey,这是问题所在,请将其发布为答案,我会接受的 :)

标签: nginx reverse-proxy


【解决方案1】:

您有正则表达式 location 匹配您的请求 /app/css/app.css 并拦截来自代理的请求。这就是正则表达式locations 的工作原理。为防止这种情况发生,请为您的应用位置使用 ^~ 修饰符:

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

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

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

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2015-06-05
    • 2021-02-25
    • 2016-10-28
    • 2017-09-09
    • 2012-03-26
    相关资源
    最近更新 更多