我开始与Nginx合作,在我的客户网络之外反向代理我的应用程序以进行互联网访问。
我设法让它工作,限制了需要公开的网址等,但有一件事仍然是由于完成了我的工作。
我想根据用户名限制用户访问权限。但是我不想为每个想要阻止的用户创建一个if,而是想使用通配符,因为我想阻塞的所有用户都以一个特定的字符串结束:@saspw
我的/etc/nginx/conf.d/reverseproxy.conf示例
server {
listen 80; # Proxy trafic for SAS Visual Analytics Transport Services on HTTP
server_name mcdonalds-va-reverseproxy.cons.sashq-r.openstack.sas.com;
if ($remote_user = '*@saspw'){
return 401;
}
location /SASVisualAnalyticsTransport {
proxy_pass https://mtbis.mcdonalds.com.au:8343/SASVisualAnalyticsTransport/;
}
}
在$ remote_user if 中,我希望用户名以@saspw结尾的所有用户都会收到401错误(我稍后会更改为404)。
只有当我输入整个用户名时才会有效,例如 joe @saspw 。使用通配符(*,?)不起作用。
有没有办法让$ remote_user以这种方式解析通配符?
谢谢你, 乔
答案 0 :(得分:2)
map $remote_user $is_denied {
default 0;
"~.*@saspw" 1;
}
server {
listen 80; # Proxy trafic for SAS Visual Analytics Transport Services on HTTP
server_name mcdonalds-va-reverseproxy.cons.sashq-r.openstack.sas.com;
if ($is_denied){
return 401;
}
location /SASVisualAnalyticsTransport {
proxy_pass https://mtbis.mcdonalds.com.au:8343/SASVisualAnalyticsTransport/;
}
}
它允许您使用正则表达式。请注意,map必须在server
指令之外。