From 6d6cdcda03235b331bfe646b24bc9d298ec3cff9 Mon Sep 17 00:00:00 2001 From: wxin <15253413025@163.com> Date: Mon, 10 Mar 2025 19:30:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20nginx=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E6=8E=A7=E5=88=B6.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nginx访问控制.md | 292 +++++++++++++++++++++++------------------------ 1 file changed, 146 insertions(+), 146 deletions(-) diff --git a/nginx访问控制.md b/nginx访问控制.md index 874eda5..7ff2ca9 100644 --- a/nginx访问控制.md +++ b/nginx访问控制.md @@ -1,147 +1,147 @@ -

Nginx 访问控制

- ------- - -## 一:nginx访问控制模块 - -``` -(1)基于IP的访问控制:http_access_module -(2)基于用户的信任登录:http_auth_basic_module -``` - - - -## 二:基于IP的访问控制 - -### 1. 语法格式 - -``` -Syntax:allow address | CIDR | unix: | all; -default:默认无 -Context:http,server,location,limit_except - -Syntax:deny address | CIDR | unix: | all; -default:默认无 -Context:http,server,location,limit_except -=================================================== -allow 允许 //ip或者网段 -deny 拒绝 //ip或者网段 -``` - -### 2. 配置测试 - -​ 编辑`/etc/nginx/conf.d/access_mod.conf`内容如下: - -```bash -[root@test ~]# vim /etc/nginx/conf.d/access_mod.conf -server { - listen 80; - server_name localhost; - - location / { - root /usr/share/nginx/html; - index index.html index.htm; - deny 192.168.159.131; - allow all; - } -} -[root@test ~]# nginx -t -[root@test ~]# nginx -s reload - -#需要注意: -1.按顺序匹配,已经被匹配的ip或者网段,后面不再被匹配。 -2.如果先允许所有ip访问,再定义拒绝访问。那么拒绝访问不生效。 -3.默认为allow all -``` - -注意: - -​ 如果先允许访问,在定义拒绝访问;那么拒绝访问不生效. - -​ 虚拟机宿主机IP为192.168.159.131,虚拟机IP为192.168.159.130,故这里禁止宿主机访问,允许其他所有IP访问。 宿主机访问http://192.168.159.130/admin,显示403 Forbidden。 当然也可以反向配置,同时也可以使用IP网段的配置方式,如allow 192.168.159.0/24;,表示满足此网段的IP都可以访问。 - -**指定`location`拒绝所有请求** - -```bash -[root@test ~]# vim /etc/nginx/conf.d/access_mod.conf -server { - listen 80; - server_name localhost; - - location / { - root /usr/share/nginx/html; - index index.html index.htm; - deny all; - } -} -[root@test ~]# nginx -t -[root@test ~]# nginx -s reload -``` - -注意: - -​ 如果你想拒绝某个指定URL地址的所有请求,而不是仅仅对其限速,只需要在location块中配置deny all指令。 - -## 三:基于用户的信任登录 - -### 1. 模块 - -​ 基于用户的信任登录模块:http_auth_basic_module - -​ 有时我们会有这么一种需求,就是你的网站的某些页面不希望公开,我们希望的是某些特定的客户端可以访问。那么我们可以在访问时要求进行身份认证,就如给你自己的家门加一把锁,以拒绝那些不速之客。 - -### 2. 语法格式 - -``` -Syntax:auth_basic string | off; -default:auth_basic off; -Context:http,server,location - -Syntax:auth_basic_user_file file; -default:默认无 -Context:http,server,location -file:存储用户名密码信息的文件。 -``` - -### 3. 配置测试 - -```bash -[root@test ~]# vim /etc/nginx/conf.d/auth_mod.conf -server { - listen 80; - server_name localhost; - - location ~ ^/admin { - root /usr/share/nginx/html; - index index.html index.htm; - auth_basic "Auth access test!"; - auth_basic_user_file /etc/nginx/auth_conf; - } -} -# auth_basic不为off,开启登录验证功能,auth_basic_user_file加载账号密码文件。 -[root@test ~]# nginx -t -[root@test ~]# nginx -s reload -``` - -```bash -建立口令文件: -[root@test ~]# yum install -y httpd-tools # htpasswd 是开源 http 服务器 apache httpd 的一个命令工具,用于生成 http 基本认证的密码文件 -[root@test ~]# htpasswd -cm /etc/nginx/auth_conf user10 # -c 创建解密文件,-m MD5加密(新版本的apache不用-m可默认加密) -[root@test ~]# htpasswd -m /etc/nginx/auth_conf user20 -[root@test ~]# cat /etc/nginx/auth_conf -user10:$apr1$bgbZyRky$SpEC50qcsw7UXHSse1yna. -user20:$apr1$NVcLhaq0$WBBC5liZKNwuQ9IN0/am/1 -``` - -访问测试: - -![](C:\Users\wxin\Desktop\nginx\accent\image-202502260006.png) - -### 4. 局限性 - -- 用户信息依赖文件方式 -- 操作管理机械,效率低下 - -### 5. 解决办法 - +

Nginx 访问控制

+ +------ + +## 一:nginx访问控制模块 + +``` +(1)基于IP的访问控制:http_access_module +(2)基于用户的信任登录:http_auth_basic_module +``` + + + +## 二:基于IP的访问控制 + +### 1. 语法格式 + +``` +Syntax:allow address | CIDR | unix: | all; +default:默认无 +Context:http,server,location,limit_except + +Syntax:deny address | CIDR | unix: | all; +default:默认无 +Context:http,server,location,limit_except +=================================================== +allow 允许 //ip或者网段 +deny 拒绝 //ip或者网段 +``` + +### 2. 配置测试 + +​ 编辑`/etc/nginx/conf.d/access_mod.conf`内容如下: + +```bash +[root@test ~]# vim /etc/nginx/conf.d/access_mod.conf +server { + listen 80; + server_name localhost; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + deny 192.168.159.131; + allow all; + } +} +[root@test ~]# nginx -t +[root@test ~]# nginx -s reload + +#需要注意: +1.按顺序匹配,已经被匹配的ip或者网段,后面不再被匹配。 +2.如果先允许所有ip访问,再定义拒绝访问。那么拒绝访问不生效。 +3.默认为allow all +``` + +注意: + +​ 如果先允许访问,在定义拒绝访问;那么拒绝访问不生效. + +​ 虚拟机宿主机IP为192.168.159.131,虚拟机IP为192.168.159.130,故这里禁止宿主机访问,允许其他所有IP访问。 宿主机访问http://192.168.159.130/admin,显示403 Forbidden。 当然也可以反向配置,同时也可以使用IP网段的配置方式,如allow 192.168.159.0/24;,表示满足此网段的IP都可以访问。 + +**指定`location`拒绝所有请求** + +```bash +[root@test ~]# vim /etc/nginx/conf.d/access_mod.conf +server { + listen 80; + server_name localhost; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + deny all; + } +} +[root@test ~]# nginx -t +[root@test ~]# nginx -s reload +``` + +注意: + +​ 如果你想拒绝某个指定URL地址的所有请求,而不是仅仅对其限速,只需要在location块中配置deny all指令。 + +## 三:基于用户的信任登录 + +### 1. 模块 + +​ 基于用户的信任登录模块:http_auth_basic_module + +​ 有时我们会有这么一种需求,就是你的网站的某些页面不希望公开,我们希望的是某些特定的客户端可以访问。那么我们可以在访问时要求进行身份认证,就如给你自己的家门加一把锁,以拒绝那些不速之客。 + +### 2. 语法格式 + +``` +Syntax:auth_basic string | off; +default:auth_basic off; +Context:http,server,location + +Syntax:auth_basic_user_file file; +default:默认无 +Context:http,server,location +file:存储用户名密码信息的文件。 +``` + +### 3. 配置测试 + +```bash +[root@test ~]# vim /etc/nginx/conf.d/auth_mod.conf +server { + listen 80; + server_name localhost; + + location ~ ^/admin { + root /usr/share/nginx/html; + index index.html index.htm; + auth_basic "Auth access test!"; + auth_basic_user_file /etc/nginx/auth_conf; + } +} +# auth_basic不为off,开启登录验证功能,auth_basic_user_file加载账号密码文件。 +[root@test ~]# nginx -t +[root@test ~]# nginx -s reload +``` + +```bash +建立口令文件: +[root@test ~]# yum install -y httpd-tools # htpasswd 是开源 http 服务器 apache httpd 的一个命令工具,用于生成 http 基本认证的密码文件 +[root@test ~]# htpasswd -cm /etc/nginx/auth_conf user10 # -c 创建解密文件,-m MD5加密(新版本的apache不用-m可默认加密) +[root@test ~]# htpasswd -m /etc/nginx/auth_conf user20 +[root@test ~]# cat /etc/nginx/auth_conf +user10:$apr1$bgbZyRky$SpEC50qcsw7UXHSse1yna. +user20:$apr1$NVcLhaq0$WBBC5liZKNwuQ9IN0/am/1 +``` + +访问测试: + +![](http://182.92.143.66:40072/directlink/img/nginx/image-202502260006.png) + +### 4. 局限性 + +- 用户信息依赖文件方式 +- 操作管理机械,效率低下 + +### 5. 解决办法 + Nginx只做中间代理,具体认证交给应用 \ No newline at end of file