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

时间:2017-06-04 23:35:42

标签: linux nginx sas

我开始与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以这种方式解析通配符?

谢谢你, 乔

1 个答案:

答案 0 :(得分:2)

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

它允许您使用正则表达式。请注意,map必须在server指令之外。