使用通配符限制nginx上的用户

我开始与Nginx合作,将我的应用程序代理服务器替代我的客户networking以外的Internet访问。

我设法使其工作,限制需要暴露的URL等,但有一件事仍然是由于完成我的工作。

我想根据用户名限制用户访问。 但是我不想为每个想要阻止的用户创build一个if,我想使用通配符,因为所有要阻止的用户都以特定的string结尾:@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这样解决通配符?

谢谢,乔

使用map nginx module

 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/; } } 

它可以让你使用正则表达式。 请注意,映射必须在server指令之外。