当前位置: 首页 > news >正文

Nginx核心配备详解:访问控制、用户认证与HTTPS部署

Nginx核心配置详解:访问控制、用户认证与HTTPS部署

一、Nginx访问控制

Nginx访问控制功能主要通过allowdeny指令实现,二者均作用于location段,用于精确管控特定URL路径的访问权限,支持单IP、多IP等多种配置方式,满足不同场景下的访问限制需求。

1.核心指令说明

指令功能描述参数格式
allow设定允许访问的主机/IP,优先级低于deny单个IP(如192.168.100.20)、多个IP(空格分隔,如192.168.100.20 192.168.100.30
deny设定禁止访问的主机/IP,优先级高于allow格式同allow,支持deny all(禁止所有主机)

2.典型配置场景

场景1:拒绝特定主机访问Nginx状态页面

若需禁止IP为192.168.100.40的主机访问/status状态页面,配置如下:

location /status {echo "ycy";  # 页面输出内容,可根据需求自定义deny 192.168.100.40;  # 禁止指定IP访问
}
  • 验证结果:当192.168.100.40主机通过curl 192.168.100.10/status访问时,Nginx会返回403 Forbidden错误,页面内容如下:
<html>
<head><title>403 Forbidden</title></head><body><center><h1>403 Forbidden</h1></center><hr><center>nginx/1.20.0</center></body>
</html>
场景2:开启stub_status模块查看Nginx状态

stub_status模块是Nginx内置的状态监控模块,可实时展示连接数、请求处理情况等核心指标,需在location段中启用:

location /status {echo "ycy";  # 自定义页面标识stub_status on;  # 开启状态监控
}
  • 状态指标说明:通过curl 192.168.100.10/status访问,返回结果及含义如下:
    • Active connections: 1:当前Nginx正在处理的活动连接数,包括读取请求、发送响应和等待的连接。
    • server accepts handled requests: 63 63 62:依次表示Nginx启动后总共接收的连接数、成功建立的TCP握手数、处理的HTTP请求数(若“接收数≠握手数”,可能存在TCP连接建立失败问题)。
    • Reading: 0:Nginx正在读取客户端请求头的连接数。
    • Writing: 1:Nginx正在向客户端发送响应头的连接数。
    • Waiting: 0:开启keep-alive(长连接)时,已处理完请求、等待客户端下一次请求的连接数,计算公式为Waiting = Active connections - (Reading + Writing)。正常情况下,若业务处理速度快,Waiting数值会较高;若Reading + Writing数值高,说明并发访问量大,需关注服务器性能。
场景3:allow与deny组合配置

allowdeny同时存在时,Nginx会按“先匹配先执行”的原则处理,且deny优先级更高。以下配置仅允许192.168.100.40访问/status,禁止其他所有主机:

location /status {stub_status on;  # 开启状态监控allow 192.168.100.40;  # 允许指定IPdeny all;  # 禁止其余所有IP
}
场景4:默认访问策略与常见配置

Nginx访问控制的默认策略为allow all(允许所有主机访问),基于此可衍生两种常用配置:

  1. 仅允许指定IP访问,禁止其他IP:适用于内部管理页面、敏感接口等场景,配置如下:
location /admin {  # 示例路径,可替换为实际需要限制的路径allow 192.168.100.11;  # 允许第一个IPallow 192.168.100.12;  # 允许第二个IPdeny all;  # 禁止其余所有IP
}
  1. 仅禁止指定IP访问,允许其他IP:适用于屏蔽恶意IP、限制特定主机的场景,配置如下:
location / {  # 对根路径生效,可按需调整路径deny 192.168.100.11;  # 禁止第一个IPdeny 192.168.100.12;  # 禁止第二个IPallow all;  # 允许其余所有IP
}

二、Nginx用户认证

Nginx用户认证基于HTTP Basic Auth机制,通过auth_basicauth_basic_user_file指令实现,需先创建加密的用户密码文件,再配置到Nginx中,确保特定路径仅授权用户可访问。

1.核心指令与密码文件格式

指令功能描述参数要求
auth_basic "欢迎信息"启用HTTP Basic Auth,引号内为认证弹窗的提示信息,支持自定义(如“请输入用户名密码”)必须配置,提示信息需用英文引号包裹
auth_basic_user_file "/path/to/user_auth_file"指定用户密码文件的绝对路径,文件中存储“用户名:加密密码”格式的记录路径必须为绝对路径,避免相对路径导致配置失效

2.完整配置步骤

步骤1:安装htpasswd工具

htpasswd是Apache HTTP Server工具集的一部分,可快速生成加密的用户密码文件,需通过包管理器安装:

# CentOS/RHEL系统(使用yum)
[root@nginx ~]# yum -y install httpd-tools
# Ubuntu/Debian系统(使用apt)
[root@nginx ~]# apt update && apt -y install apache2-utils
步骤2:创建用户密码文件

进入Nginx配置目录(通常为/usr/local/nginx/conf/),使用htpasswd创建文件并添加用户(以用户ycy为例):

# 进入Nginx配置目录
[root@nginx ~]# cd /usr/local/nginx/conf/
# 生成密码文件(-c:创建新文件;-m:使用MD5加密密码;.user_auth_file:文件名,前缀“.”表示隐藏文件)
[root@nginx conf]# htpasswd -c -m .user_auth_file ycy
New password:  # 输入密码(输入时不显示,需谨慎输入)
Re-type new password:  # 再次输入密码确认
Adding password for user ycy  # 提示添加用户成功
  • 查看密码文件:生成的文件内容包含用户名和加密后的密码(MD5格式),示例如下:
[root@nginx conf]# cat .user_auth_file 
ycy:$apr1$whXqcpS.$EORacQbsq0P6JblZ0ayM5/  # 格式:用户名:加密密码
步骤3:配置Nginx用户认证

编辑Nginx主配置文件(通常为/usr/local/nginx/conf/nginx.conf),在目标location段中添加认证指令:

location /status {  # 对/status路径启用认证,可替换为实际路径(如/admin)stub_status on;  # 可选,若需同时启用状态监控则保留auth_basic "welcome to hyedu";  # 认证弹窗提示信息auth_basic_user_file "/usr/local/nginx/conf/.user_auth_file";  # 密码文件绝对路径
}
步骤4:验证配置并重载Nginx
  1. 测试配置文件语法:避免因配置错误导致Nginx无法启动:
[root@nginx conf]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful  # 提示语法正确
  1. 重载Nginx配置:使认证配置生效,无需重启服务:
[root@nginx conf]# nginx -s reload
步骤5:验证用户认证效果

通过浏览器或curl访问配置路径(如192.168.100.10/status):

  1. 浏览器访问:会弹出认证弹窗,提示输入用户名和密码,输入正确的ycy及对应密码后,可正常查看/status页面的状态信息;若密码错误,会反复弹窗要求重新输入,或返回401 Unauthorized错误。
  2. curl访问:需通过-u参数指定用户名和密码,示例如下:
# 正确认证(替换为实际密码)
curl -u ycy:redhat http://192.168.100.10/status
# 输出结果(认证成功后显示状态信息)
Active connections:1
server accepts handled requests
64 64 64
Reading: 0 Writing: 1 Waiting:0

三、Nginx HTTPS配置

HTTPS基于SSL/TLS协议实现数据加密传输,Nginx配置HTTPS需先通过CA(证书颁发机构)生成合法证书,再在Nginx中配置SSL相关参数,确保网站通过https://协议访问。

1.环境说明

角色IP地址核心任务
Nginx服务器192.168.100.10生成证书签署请求(CSR)、部署HTTPS配置、提供加密访问服务
CA服务器192.168.100.30生成CA根证书、签署Nginx的CSR请求、颁发服务器证书

2.完整配置步骤(基于自建CA)

步骤1:在CA服务器生成根证书(自建CA)

自建CA适用于内部测试、局域网服务等场景;若为公网网站,需向阿里云、Let’s Encrypt等公共CA申请证书。

  1. 创建CA证书存储目录:规范证书文件存放路径:
[root@ca ~]# mkdir -p /etc/pki/CA/private  # 存储CA私钥(权限需严格控制)
[root@ca ~]# cd /etc/pki/CA/
  1. 生成CA私钥(cakey.pem):使用openssl生成2048位RSA私钥,umask 077确保私钥文件仅root可读写:
[root@ca CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
.+++++
....................+++++
e is 65537 (0x010001)  # 生成成功提示
  1. 提取CA公钥(可选):从私钥中导出公钥,用于验证证书合法性:
[root@ca CA]# openssl rsa -in private/cakey.pem -pubout
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvaWtkdtUn3T+pXIvD1Rf
LUGP8NdmlVqwamSU7fxqRA5BiWi7gKsNpnSBHlXGJ3PeFBRbNfff/IOpZLnMWDB4
OKDp63pB4OcB3GKWNoJsDYEg5m4HYdhHjJRywTkfmuUNoIok8fBg6gsYYHov9EVK
tmV9FTZBRIPSq7hiVm8dYPDFsuAhvi5CUxGO/VEXRsiJvePSQ1IAaMYUv/mDDMKC
GXX/qvyWPRMA6KdFmr6hO32jbY3fzllzfQpN3tjNrXbQPRa1o6GFQ9nQC8kHzo5L
qtRdeJ0ZMqQyU76f6kJQwcBPS2t/ByTGxq8DRAiVATNK2xO3LuNvfCv+CYRYuVwV
bwIDAQAB
-----END PUBLIC KEY-----
  1. 生成CA根证书(cacert.pem):基于私钥生成自签名根证书,有效期1024天:
[root@ca CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 1024
  • 执行后需填写证书信息(按实际情况填写,Common Name建议为CA服务器标识):
Country Name (2 letter code) [XX]:CN  # 国家代码(中国为CN)
State or Province Name (full name) []:HB  # 省份(如湖北省缩写HB)
Locality Name (eg, city) [Default City]:WH  # 城市(如武汉市缩写WH)
Organization Name (eg, company) [Default Company Ltd]:luoqi  # 组织/公司名称
Organizational Unit Name (eg, section) []:linux  # 部门名称
Common Name (eg, your name or your server's hostname) []:ycy  # 证书主体标识(自定义)
Email Address []:cy@example.com  # 邮箱地址(自定义)
步骤2:在Nginx服务器生成证书签署请求(CSR)
  1. 进入Nginx配置目录:证书文件建议与Nginx配置文件存放在同一目录,便于管理:
[root@nginx ~]# cd /usr/local/nginx/conf/
  1. 生成Nginx服务器私钥(httpd.key):同样使用2048位RSA加密,umask 077确保私钥安全:
[root@nginx conf]# (umask 077; openssl genrsa -out httpd.key 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
................................................................................+++++
............................................................................................................+++++
e is 65537 (0x010001)  # 生成成功提示
  1. 生成CSR文件(httpd.csr):CSR包含服务器信息和公钥,需发送给CA进行签署:
[root@nginx conf]# openssl req -new -key httpd.key -days 1024 -out httpd.csr
  • 填写的信息需与CA根证书保持一致(尤其是Country Name、State、Locality、Organization),避免签署失败:
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HB
Locality Name (eg, city) [Default City]:WH
Organization Name (eg, company) [Default Company Ltd]:luoqi
Organizational Unit Name (eg, section) []:linux
Common Name (eg, your name or your server's hostname) []:ycy
Email Address []:cy@example.com
  1. 查看CSR文件:确认文件生成成功,后续需上传至CA服务器:
[root@nginx conf]# ls
httpd.csr  httpd.key  # 显示CSR和私钥文件,说明生成成功
  1. 将CSR文件上传至CA服务器:通过scp命令传输(需确保CA服务器可正常登录):
[root@nginx conf]# scp httpd.csr root@192.168.100.30:/root/
# 输入CA服务器root密码后,完成文件传输
步骤3:在CA服务器签署证书并返回给Nginx
  1. 准备CA签署环境:创建证书签署所需的目录和文件:
[root@ca ~]# mkdir /etc/pki/CA/newcerts  # 存储签署后的服务器证书
[root@ca ~]# touch /etc/pki/CA/index.txt  # 证书索引文件(记录证书状态)
[root@ca ~]# echo "01" > /etc/pki/CA/serial  # 证书序列号文件(初始为01,后续递增)
  1. 签署Nginx的CSR文件:生成服务器证书(httpd.crt),有效期1024天:
[root@ca ~]# openssl ca -in httpd.csr -out httpd.crt -days 1024
  • 执行过程中会提示确认证书信息,输入y两次(分别确认“签署证书”和“提交到数据库”):
Check that the request matches the signature
Signature ok
Certificate Details:...(证书详细信息,省略)
Certificate is to be certified until ... (1024 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]:y
Write out database with 1 new entries
Data Base Updated  # 签署成功提示
  1. 查看签署后的证书:确认证书生成成功:
[root@ca ~]# ls
anaconda-ks.cfg  Documents  httpd.crt  httpd.csr  # 包含httpd.crt(服务器证书)和httpd.csr(原始请求)
  1. 将证书传输回Nginx服务器:需传输两个文件:签署后的服务器证书(httpd.crt)和CA根证书(cacert.pem):
# 传输服务器证书
[root@ca ~]# scp httpd.crt root@192.168.100.10:/usr/local/nginx/conf/
# 传输CA根证书(客户端需信任此证书,避免浏览器提示“不安全”)
[root@ca ~]# scp /etc/pki/CA/cacert.pem root@192.168.100.10:/usr/local/nginx/conf/
步骤4:在Nginx服务器配置HTTPS
  1. 编辑Nginx主配置文件:启用443端口(HTTPS默认端口),添加SSL相关配置:
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
  • http块中添加server段,配置如下:
server {listen       443 ssl;  # 监听443端口,启用SSLserver_name  localhost;  # 服务器域名(公网场景需替换为实际域名,如www.example.com)# SSL证书配置ssl_certificate      httpd.crt;  # 服务器证书路径(相对路径,基于Nginx配置目录)ssl_certificate_key  httpd.key;  # 服务器私钥路径# SSL会话缓存配置(提升性能)ssl_session_cache    shared:SSL:1m;  # 共享会话缓存,大小1MBssl_session_timeout  5m;  # 会话超时时间5分钟# SSL加密套件配置(优先选择高强度加密)ssl_ciphers  HIGH:!aNULL:!MD5;  # 启用高强度加密套件,排除弱加密ssl_prefer_server_ciphers  on;  # 优先使用服务器端指定的加密套件# 网站根目录与默认页面配置location / {root   html;  # 网站根目录(默认在/usr/local/nginx/html/)index  index.html index.htm;  # 默认首页文件}
}
  1. 测试HTTPS配置语法:确保配置无错误:
[root@nginx conf]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful  # 配置正确
  1. 创建测试网页并重载Nginx
# 进入网站根目录
[root@nginx conf]# cd /usr/local/nginx/html/
# 创建测试首页(内容自定义)
[root@nginx html]# echo "ycy" > index.html
# 重载Nginx,使HTTPS配置生效
[root@nginx html]# nginx -s reload
步骤5:验证HTTPS访问效果

通过浏览器访问https://192.168.100.10(若为自建CA,浏览器会提示“证书不受信任”,点击“高级”→“继续访问”即可),页面会显示ycy(即测试首页内容),表示HTTPS配置成功。

  • 补充说明:公网场景下,需将CA根证书部署到客户端(如用户浏览器、手机系统),或使用公共CA颁发的证书(如Let’s Encrypt的免费证书),避免浏览器提示“不安全”。
http://www.hskmm.com/?act=detail&tid=22332

相关文章:

  • 5. 最长回文子串
  • 基于Python+Vue开发的婚恋交友管理系统源码+运行步骤
  • 2025 年搅拌机设备厂家 TOP 企业品牌推荐排行榜,盘点磁混凝系统 / 发酵罐 / 刮泥机 / 推进式 / 脱硫侧搅拌机公司推荐!
  • 福州市 2025 国庆集训 Day1 前三题题解
  • Python常用数据类型详解:字符串、列表、字典全解析
  • 强连通,Tarjan,缩点
  • OI 笑传 #13
  • Python方案--交互式VR教育应用开发
  • 纯Qt代码实现onvif协议设备端/onvif设备模拟器/onvif虚拟监控设备/桌面转onvif
  • *补*““逆元求组合数”(费马小定理
  • C# WPF中Binding的 Source属性和ElementName属性有什么区别
  • Typora to Obsidian 迁移助手 (Typora-to-Obsidian-Migration-Helper)
  • 64. 最小路径和
  • 题解:P1020 [NOIP 1999 提高组] 导弹拦截
  • 哈希表专题
  • Meta基础设施演进与AI技术革命
  • 完整教程:Spring AI整合聊天模型DeepSeek
  • 2025 年焚烧炉厂家 TOP 企业品牌推荐排行榜!权威甄选实力与口碑俱佳的江苏焚烧炉 / 无锡焚烧炉推荐这十家公司!
  • 2025 年防腐涂料厂家 TOP 企业品牌推荐排行榜,乙烯基、环氧煤沥青、环氧防腐涂料、防腐涂料地坪 、防腐涂料水池推荐这十家公司!
  • 2025双氧水厂家权威推荐榜:优质供应与专业定制实力之选
  • Win环境下包管理工具
  • MX Round 11 解题报告
  • 用 C# 打造企业资产管理系统雏形——从控制台到完整模块设计 - 详解
  • java开发之微信机器人的二次开发
  • 10.1刷题计划一
  • 笔记本电脑重装系统后找不到5G WIFI无线网或蓝牙模块消失的解决方案
  • 菜鸟坚持记录-开头篇
  • AI+传统工作流:Photoshop/Excel的智能插件开发指南 - 实践
  • Typora 笔记迁移 Obsidian 图片附件库批量移动方法,适用于笔记整理。
  • 2025年确有专长培训权威推荐榜:专业资质与特色诊疗口碑之选