nginx conf if

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

评论