Nginx中如何控制URL的访问权限?
访问控制是网站安全防范和保护的主要策略,其任务是保证网络资源不被非法访问。在nginx中,我们可以在access阶段(共有11个处理阶段)控制用户对URL的访问,可以使用 allow 和 deny 控制可访问的客户端的源端IP范围,也可以使用auth_basic模块对用户名和密码进行验证等。
限制某些IP地址的访问权限
Nginx 中提供了两个用于配置访问权限控制的指令,分别为 allow
和 deny
。 allow
用于设置允许访问的权限、 deny
用于设置禁止访问的权限 。 在使用时, 权限指令后只需跟上允许或禁止的 IP、IP 段或 all 即可 。其中,all 表示所有的 。
同一块下,若同时存在多个权限指令(deny、allow
) ,则先出现的访问权限设置生效, 并且会对后出现的设置进行破盖,未覆盖的范围依然生效,否则以先出现的设置为准。
只允许指定IP访问
环境信息:
-
-
- 客户端(A)在本地Windows机器上 :192.168.2.1
- Nginx服务部署都在192.168.2.129
-
location / { root html; index index.html index.htm; allow 192.168.2.1; deny all; }
- 上述指令表示只允许
192.168.2.1
客户端访问,其他所有客户端都不能访问。 - 需要注意的是,若省略此处的
deny all
,则会允许所有客户端访问 - 若将
deny all
移动到allow 192.168.2.1
之后,则会阻止所有客户端 访问 。
在本地Windows机器上(192.168.2.1)访问效果如下:
在服务器(192.168.2.129)访问效果如下:
[root@dev conf]# curl -I http://192.168.2.129/ HTTP/1.1 403 Forbidden Server: nginx/1.24.0 Date: Sun, 05 Nov 2023 09:17:09 GMT Content-Type: text/html Content-Length: 153 Connection: keep-alive
利用auth_basic进行用户密码认证
有时候我们通过Nginx搭建了一台文件服务器,但我们又希望该服务器不让所有人可以访问,比较简单的做法是配置基于HTTP Basic Authutication协议进行用户名和密码的认证。
auth_basic模块
Auth_Buth
模块有两个指令:
- auth_basic:简单描述
- auth_basic_user_file:auth_basic_user 文件的路径
用户密码的生成可以使用
htpasswd
这个工具,需要单独安装,也可以用大多数Linux服务器都会自带的openssl来创建,不需要安装额外的工具。
使用示例
1、生成密码
生成密码 [root@dev passwd]# openssl passwd 123456 # 123456是密码 189VHzkLsdFfY 写入配置文件 [root@dev passwd]# cat > auth_basic_user << EOF > root:189VHzkLsdFfY > EOF
把生成的密码和用户名整理成如下格式的文件,取一个自定义的名字,放到Nginx
的配置目录下,比如 /home/ap/nginx2/conf/passwd/auth_basic_user.txt
#username:password root:189VHzkLsdFfY qiubo:189VHzkLsdFfY
除注释外,这个文件中,每一行是一个Basic Auth
格式的用户。以:
分割,前一部分是用户名,后一部分是加密后的密码。
2、配置location
location / { root html; index index.html index.htm; allow 192.168.2.1; deny all; auth_basic "Auth Describtion"; #描述信息 auth_basic_user_file passwd/auth_basic_user; #密码文件路径 }
此处使用了Nginx自带的内置模块ngx_http_auth_basic_module
,该模块是用来实现Basic Auth
的。auth_basic
和auth_basic_user_file
是该模块的两个指令
3、登录验证
重新reload加载配置:
[root@dev nginx2]# ./sbin/nginx -s reload
输入http://192.168.2.129/ 访问就会出现登录的提示:
所以当我们需要对网站或者URL接口做一个认证的时候,比较简单的做法是通过Nginx配置配置Basic Auth登录认证即可,不用搭建登录认证系统。
评论列表 (0条):
加载更多评论 Loading...