前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx 访问权限管理

Nginx 访问权限管理

作者头像
奋飛
发布2021-08-30 10:36:19
1.7K0
发布2021-08-30 10:36:19
举报
文章被收录于专栏:Super 前端

前段时间,团队开放了组件库演示环境,由于存在一些小伙伴在外地办公(只能外网或者 vpn 到内网)。所以,为了安全考虑,设想是否可以通过 Nginx 做一些访问限制呢?当然,答案是肯定的。

诉求整理:

  • 内网:为了便利性,随意访问,不设限制;
  • 外网:通过指定的用户名和密码访问(当然,要求秘钥的保密性)。

增加认证

这个很简单,使用 Nginx 的 ngx_http_auth_basic_module 模块,即可完成。

ngx_http_auth_basic_module 模块允许通过使用“HTTP基本身份验证”协议验证用户名和密码来限制对资源的访问。

代码语言:javascript
复制
location / {
    auth_basic "请输入密码或联系IDSS-FE相关成员";			 # 提示
    auth_basic_user_file /usr/local/nginx/.passwd; # 密钥文件
}

上述 auth_basicauth_basic_user_file 作用域均为 http, server, location, limit_excep

对于密码形式,其支持(具体可以查看参考链接 Nginx 相关模块信息):

  • crypt() 函数加密; 可以使用 Apache HTTP Server发行版中的 “htpasswd” 实用程序或 “openssl passwd” 命令生成;
  • 使用基于 MD5 的密码算法(apr1)的 Apache 变体进行散列;
  • RFC 2307 中描述的 “{scheme} data” 语法(1.0.3+)指定;

生成密码

这里使用 Apache 的 htpasswd 工具生成。

htpasswd - Manage user files for basic authentication

代码语言:javascript
复制
# [可选]安装 httpd-tools
$ yum install -y httpd-tools
# 生成密钥文件
$ htpasswd -c /usr/local/nginx/.passwd idss-fe
# 按提示输入密码、确认密码,即完成配置
  • - c 创建 passwd 文件。如果 passwdfile 已存在,则会重写并截断。此选项不能与 -n 选项组合使用。(具体可查看参考链接 Apach 相关文档)
  • idss-fe 为用户名,会添加到 .passwd 文件中

生成的内容,格式如下:

代码语言:javascript
复制
idss-fe:$apr111$d/Rw..nPddMiS...FSg0tho0

上述,整体处理完成,不要忘记 $ nginx -s reload

访问限制

只针对外网做限制。其中,这里实现的思路,是逆向的。外网的 IP,没办法穷举;但是我们部署的服务器,和我们自身的内网环境是属于同一个网段,我们放行该网段,同时禁止其他所有访问,也就达到了上述目的。

这里使用 Nginx 的核心模块 Module ngx_http_core_module 中的 satisfyngx_http_access_module 模块结合实现。

ngx_http_access_module模块允许限制对某些客户端地址的访问

代码语言:javascript
复制
location / {
    satisfy any;	# 下述 access 和 auth_basic 任意通过即可

    allow 192.168.1.0/32; # 只需求该网段,其他全部禁止
    deny  all;

    auth_basic "请输入密码或联系IDSS-FE相关成员";
    auth_basic_user_file /usr/local/nginx/.passwd;
}
  • satisfy all 全部或 satisfy any 下述任意一个 ngx_http_access_modulengx_http_auth_basic_modulengx_http_auth_request_modulengx_http_auth_jwt_module 模块允许访问,则允许访问。 作用域 http, server, location
  • allow 同时支持 IPv4/IPv6。allow 192.168.1.0/32; allow 2001:0db8::/32; 作用域 http, server, location, limit_except。(具体可查看参考链接 access module 相关文档)

附:完整配置

代码语言:javascript
复制
ocation / {
  satisfy any;
  
  allow 192.168.101.0/32;
  deny all;
  
  auth_basic "请输入密码或联系IDSS-FE相关成员";	
  auth_basic_user_file /usr/local/nginx/.passwd;
    
  root   /idss/demo-collection/dist;
  index  index.html index.htm;
  try_files $uri $uri/ /index.html;
}

参考地址

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2704r1t8r6680

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 增加认证
  • 生成密码
  • 访问限制
  • 附:完整配置
  • 参考地址
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档