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

何塞·利马

我正在与Nginx进行合作,以反向代理我的应用程序以访问客户网络之外的Internet。

我设法使其正常运行,限制了需要公开的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那样解决通配符?

谢谢乔

罗伯特

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章