gpt4 book ai didi

nginx - if 条件在 nginxconf 中的 location block 内如何工作?

转载 作者:行者123 更新时间:2023-12-02 10:58:38 25 4
gpt4 key购买 nike

我已读过 https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

我想检查我的 Rails 应用程序是否已添加 header (Access-Control-Allow-Origin),如果尚未添加 header 。

这里的例子试图解释 nginx.conf http://agentzh.blogspot.in/2011/03/how-nginx-location-if-works.htmlif 条件的行为。

但是我还没看懂。我的问题之一是当他们说指令或阶段指令时是什么意思?

我自己也尝试过一些事情。喜欢:

location / {
add_header My-outer-header '*';
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;

if($sent_http_access_control_allow_origin != /*){
add_header My-inner-header '**';
}
}

此处,当满足 if 条件时,仅设置 My-inner-header,而不设置 My-outer-header

但是当我这样做时:

location / {
add_header My-outer-header '*';
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
set $a 1;
if($a == 1){
add_header My-inner-header '**';
}
}

此处 $a 变量设置为 1,但仅再次设置 My-inner-header 而不是 My-outer-header

我想检查并确保像 proxy_set_header 这样的指令是否被执行。

最佳答案

我还没有测试过你的代码。我只是根据经验说话!!!

首先,请允许我指出 Nginx 配置与任何 OOP 行为(面向对象编程)完全不同。用一个词来说,它是不可预测的“声明性”。

含义...如果同一 block 中有 2 个 IF 语句,并且都满足条件,则只有第二个语句优先并被执行。

同样的情况也发生在 1 if 和它之前在同一 block 中的所有声明中。由于 IF 的存在,某些变量(并非全部)将不会被执行,并且 nginx 希望在其中重新声明它们。这发生在你的例子中。为了清楚起见,让我们看第二个。在位置 block 内,您声明了几个 header 值。但是,当满足 IF 语句时,它们不会被执行(IF 在 nginx 中确实是邪恶的)。为了完整执行,您需要在 if 语句内重新声明大部分 header 变量以及 if 之外的任何其他变量,再次在 if 语句内声明,以便在满足 if 语句时执行它们。注意,没有映射列出 nginx 中受 IF 影响的所有变量,您应该测试我们的conf是否有任何错误。有些变量不需要重新声明,在这种情况下,nginx 将在重新启动时报告错误。找出其中的唯一方法是全力以赴并排除所报告的错误。

建议

a) 如果可能,请避免在 nginx 中使用 IF。请改用位置 block 。例如如果您只想为某些文件添加像 Access-Control-Allow-Origin 这样的 header 变量,请不要使用 if,而是使用第二个位置 block (见下文)

location / {
// some code here
}
location ~* \.(eot|ttf|woff|woff2)$ {
add_header Access-Control-Allow-Origin *;
}

b) 如果 IF 是强制性的,请谨慎使用并测试测试。如上所述,重新声明 if 语句中的所有内容是一个很好的做法(如上所述,测试并排除哪个重新声明会破坏配置)。

祝你好运。

关于nginx - if 条件在 nginxconf 中的 location block 内如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35257968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com