如果这个问题已经得到回答或记录,我很抱歉,但我对此感到困惑,所以我希望社区可以提供一些见解。
下面的例子专门针对proxy_pass
和proxy_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
模块强制处理指令
我能找到的唯一关于这个事实的参考资料是假如邪恶文章。