Nginx 配置操作顺序

Nginx 配置操作顺序

如果这个问题已经得到回答或记录,我很抱歉,但我对此感到困惑,所以我希望社区可以提供一些见解。

下面的例子专门针对proxy_passproxy_set_header配置指令,但我的总体问题更像是“HNginx 配置如何处理排序?“类型的问题。

我遇到了一些有效的 nginx 配置,其中的位置块如下:

  location / {
    proxy_pass http://internal.example.com/req;

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-User $auth_resp_x_user;
  }

这让我很困惑,因为我一直认为顺序很重要,并且标题需要在行之前设置proxy_pass。例如:

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-User $auth_resp_x_user;

    proxy_pass http://internal.example.com/req;
  }

问题:

  • 顺序真的很重要吗?
  • 如果这里不重要,那是否特定于 proxy_pass?在其他 nginx 配置行中它很重要,对吗?
  • 这种排序/优先顺序在什么地方有记录吗?(如果有的话抱歉,我没有看到)

感谢您的任何见解和帮助。

答案1

总体来说,nginx 配置是声明式的。这意味着,每个配置指令都会对处理请求的某些单独定义的处理步骤产生影响。

这意味着特定范围内的指令顺序通常并不重要。

然而,一般规则也有例外:

  • location与正则表达式匹配的块依赖于顺序。第一个匹配的块用于处理请求。

  • rewrite模块强制处理指令

我能找到的唯一关于这个事实的参考资料是假如邪恶文章。

相关内容