nginx支持if语法,语法和平常的代码格式差不多:
1 2 3 4 5 6
| if ($http_x_user = "summer") { return 401; } if ($remote_addr = "192.168.2.2") { return 401; }
|
只是和代码不同的是,if条件语句判断相等只要一个等号,不是==。
nginx虽然有if,但是却不支持else,如果想要构造else语法,可以使用下面的这个“小诀窍”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| server { server_name *.maqian.io; listen 80;
location / { set $is_matched 0; if ($host = a.maqian.io) { proxy_pass https://127.0.0.1:1001/; set $is_matched 1; } if ($host = b.maqian.io) { proxy_pass https://127.0.0.1:1002/; set $is_matched 1; } # 没有匹配到,跳转到默认页面 if ($is_matched = 0) { proxy_pass https://127.0.0.1; } # xxx # xxx # xxx } }
|
参考文章
https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/
https://nginx.org/en/docs/http/ngx_http_core_module.html?&_ga=2.71427731.14852861.1651803177-1904749950.1651803177#var_proxy_protocol_addr