【问题标题】:Nginx, try_files proxy and named location with 404 fallbackNginx、try_files 代理和具有 404 回退的命名位置
【发布时间】:2013-11-29 15:02:38
【问题描述】:

我有一个奇怪的问题,它只影响我正在开发的一个本地应用程序 - 采用这种方法的其他应用程序似乎工作正常(Ghost)。这是来自我的 Nginx 服务器配置:

location @node_proxy {
  proxy_set_header        X-Real-IP            $remote_addr;
  proxy_set_header        X-Forwarded-For      $remote_addr;
  proxy_set_header        X-Forwarded-Proto    $scheme;
  proxy_set_header        X-NginX-Proxy        true;
  proxy_set_header        Host                 $host;
  proxy_redirect          off;
  proxy_pass              http://127.0.0.1:5000;
}

location / {
  try_files @node_proxy =404;
}

正如我所说,我的 Ghost 运行方式与此相同,并且运行良好。然而,对于这个配置,它会导致每个请求都是 404 - 它似乎永远不会命中代理。我检查了日志,这证实了我的怀疑,访问或错误日志中没有条目。

在这个实例中我代理的应用只是一个简单的基于 Express 的节点应用,所以没有什么复杂的。访问http://127.0.0.1:5000我看到了预期的结果。

如果我将配置更改为:

location / {
  proxy_set_header        X-Real-IP            $remote_addr;
  proxy_set_header        X-Forwarded-For      $remote_addr;
  proxy_set_header        X-Forwarded-Proto    $scheme;
  proxy_set_header        X-NginX-Proxy        true;
  proxy_set_header        Host                 $host;
  proxy_redirect          off;
  proxy_pass              http://127.0.0.1:5000;
}

它按预期工作,但是我想使用命名位置以避免重复代理声明。

我是否遗漏了一些明显的东西?

【问题讨论】:

    标签: nginx proxy


    【解决方案1】:

    试试这种技巧:

    location @root {
        ...
    }
    
    location / {
        error_page 418 = @root; return 418; # redirect to @root
    }
    

    似乎不可能从常规位置跳转到指定位置。你也可以试试try_files @root @root,但是 Igor Sysoev(nginx 的作者)说error_page 更好,因为它使用的资源更少。

    【讨论】:

    • 我刚刚使用try_files false @root; 完成了这项工作,似乎效果很好
    • 我猜nginx认为false无论如何都是文件名
    • 我同意,尽管我尝试创建一个名为 false 的文件,但它似乎没有破坏任何东西。
    猜你喜欢
    • 2014-02-12
    • 2019-09-13
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2016-10-24
    相关资源
    最近更新 更多