Nginx使用url参数做反射代理

原文来自:snippets.barretlee.com,只是为了自己学习收集特意fork了一遍。如有侵权,联系删除:i@webcliwn.net

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
26
27
28
29
30
31
32
server {
server_name www.demo.com;
listen 80;

location / {
# 配置默认ip
set $default_ip 127.0.0.1;

# 配置默认port
set $default_port 8080;

# 如果url中包含ip=x
if ($request_uri ~* ip=(.+?)(&|$)) {
set $default_ip $1;
}

# 如果url中包含port=1
if ($request_uri ~* port=(\d+?)(&|$)) {
set $default_port $1;
}

# 配置代理参数
proxy_set_header Connection "";
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;

# 代理
proxy_pass http://$default_ip:$default_port;
}
}

使用方式:

1
2
3
4
5
6
7
8
9
10
11
// 使用默认值
www.demo.com

// 使用配置ip
www.demo.com/?ip=127.0.0.1

// 使用配置port
www.demo.com/?port=88

// IP+port
www.demo.com/?port=88&ip=127.0.0.01