Nginx
nginx:為什麼我不能將 proxy_set_header 放在 if 子句中?
使用此配置:
server { listen 8080; location / { if ($http_cookie ~* "mycookie") { proxy_set_header X-Request $request; proxy_pass http://localhost:8081; } } }
重新載入 nginx 服務時出現此錯誤:
Reloading nginx configuration: nginx: [emerg] "proxy_set_header" directive is not allowed here in /etc/nginx/conf.d/check_cookie.conf:5 nginx: configuration file /etc/nginx/nginx.conf test failed
此配置工作正常,但它不符合我的要求:
server { listen 8080; location / { proxy_set_header X-Request $request; if ($http_cookie ~* "mycookie") { proxy_pass http://localhost:8081; } } }
為什麼我不能將proxy_set_header指令放在 if 子句中?
假設您實際上是想問,“我怎樣才能讓它工作”,那麼只需重新編寫以便始終傳遞標頭,但如果您不想設置它,請將其設置為某個忽略的值。
server { listen 8080; location / { set $xheader "someignoredvalue"; if ($http_cookie ~* "mycookie") { set $xheader $request; } proxy_set_header X-Request $xheader; if ($http_cookie ~* "mycookie") { proxy_pass http://localhost:8081; } }
‘If’ 在 nginx 配置中通常是一個不好的做法。您可以使用地圖模組使事情正常進行。見http://nginx.org/en/docs/http/ngx_http_map_module.html http://wiki.nginx.org/HttpMapModule