Nginx$upstream_addr变量在IF条件下不起作用 [英] Nginx $upstream_addr variable doesn't work in if condition
本文介绍了Nginx$upstream_addr变量在IF条件下不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
proxy_pass
指令运行反向代理。我想forbid访问某些后端网段(如172.0.0.0/24
)。我试过了
if ($upstream_addr ~* "^172.*") {
return 403;
}
add_header X-mine "$upstream_addr";
在server
和location
两个上下文中都不工作,即nginx仍返回200:
$ curl localhost -I
HTTP/1.1 200 OK
Server: nginx/1.17.0
Date: Thu, 13 Feb 2020 12:58:36 GMT
Content-Type: text/html
Content-Length: 612
Connection: keep-alive
Last-Modified: Tue, 24 Sep 2019 14:49:10 GMT
ETag: "5d8a2ce6-264"
Accept-Ranges: bytes
X-mine: 172.20.0.2:80
我错过了什么?(请注意,我将$upstream_addr
变量的内容添加到X-mine
头中进行调试。)
推荐答案
我的理解是,if
指令在发送上行请求之前运行,而$upstream_addr
头只在上行请求完成后设置。我试图找到解释确切过程的权威文档,但失败了,但nginx文档似乎遗漏了一些人们可能希望的东西。
这篇关于Nginx$upstream_addr变量在IF条件下不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文