我正在尝试将具有特定 IP 的用户通过 proxy_pass 传递给 ,http://server1
并将某些其他用户传递给http://server2
。如果用户与任何 IP 都不匹配,我想返回 403。以下是我所拥有的:
geo $userGroup1 {
default 0;
192.168.178.2 1;
}
geo $userGroup2 {
default 0;
192.168.178.3 1;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_tokens off;
server_name _;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
if ($userGroup1) {
proxy_pass http://server1
}
if ($userGroup2) {
proxy_pass http://server2
}
# return 403 <-- returns 403 for all users
}
}
我的配置需要如何改变?
答案1
终于开始测试这个了,请记住“proxy_pass”不能包含下面示例中的 URI,请使用 IP 地址。
如果您想通过 URI 转发到另一台服务器,您可以使用“return”或“rewrite”而不是“proxy_pass”;有关更多信息,请单击这里。
geo $remote_addr $userGroup {
default 0;
192.168.178.2 1;
192.168.178.3 2;
}
server {
listen 80;
listen [::]:80;
server_name _;
server_tokens off;
index index.html index.htm index.nginx-debian.html;
location / {
if ($userGroup = 1) {
proxy_pass https://192.168.178.201;
}
if ($userGroup = 2) {
proxy_pass https://192.168.178.202;
}
return 403; # Anyone else would get a 403
}
}
答案2
尝试使用指令'休息' 在 'if' 语句中,如下所示:
geo $userGroup1 {
default 0;
192.168.178.2 1;
}
geo $userGroup2 {
default 0;
192.168.178.3 1;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_tokens off;
server_name _;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
if ($userGroup1) {
proxy_pass http://server1;
break; # <-------- HERE
}
if ($userGroup2) {
proxy_pass http://server2;
break; # <-------- HERE
}
return 403; # <-- returns 403 for all users
}
}