【问题标题】:Limit users on nginx using wildcard使用通配符限制 nginx 上的用户
【发布时间】:2017-06-05 11:19:26
【问题描述】:

我开始使用 Nginx 反向代理我的应用程序,以便在客户网络之外访问互联网。

我设法让它工作,限制需要公开的 URL 等,但还有一件事要完成我的工作。

我想根据用户名限制用户访问。但是,我不想为我要阻止的每个用户创建一个 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 以这种方式解决通配符?

谢谢你, 乔

【问题讨论】:

标签: linux nginx sas


【解决方案1】:

使用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 指令之外。

【讨论】:

  • 太棒了,问题解决了!非常感谢你,罗伯特!
猜你喜欢
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 2014-10-19
  • 2020-03-13
  • 2019-11-04
  • 1970-01-01
相关资源
最近更新 更多