我开始与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
指令之外。