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

news/2025/10/1 16:00:26/文章来源:https://www.cnblogs.com/lxjshuju/p/19122502

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.mzph.cn/news/923998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析:5. Prompt 提示词

深入解析:5. Prompt 提示词2025-10-01 15:59 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important;…

基于Python+Vue开发的婚恋交友管理系统源码+运行步骤

项目简介该项目是基于Python+Vue开发的婚恋交友管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于…

南通医院网站建设方案网站 mysql数据库 字符

一直以来玩各种开发板&#xff0c;焊接水平太差始终是阻碍我买性价比高的板子的最大原因。淘宝上好多芯片搭载上肥猪流板子是不包排针焊接的。终于下定决心要克服这个困难。不过&#xff0c;只是会焊接排针在高手面前最好不要说自己会焊锡&#xff0c;这应该是两码事。 首先上…

详细介绍:Python 编辑器:PyCharm

详细介绍:Python 编辑器:PyCharm2025-10-01 15:45 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impo…

2025 年搅拌机设备厂家 TOP 企业品牌推荐排行榜,盘点磁混凝系统 / 发酵罐 / 刮泥机 / 推进式 / 脱硫侧搅拌机公司推荐!

在当前工业生产领域,搅拌机作为关键设备,广泛应用于石化、化工、新能源、环保等多个行业,其性能与质量直接影响生产效率和产品品质。然而,随着市场需求的不断增长,搅拌机生产厂家数量持续增加,行业内产品质量参差…

福州市 2025 国庆集训 Day1 前三题题解

福州市 2025 国庆集训 Day1 前三题题解 别问为啥只有前三题,因为后面我不会…… Day1 题单 T1 旅行 传送门 注意到 \(P\) 非常小,所以可以考虑指数级别的做法。 考虑状压 dp。设 \(f_{s,u}\) 表示经过 \(P\) 内的点集…

Python常用数据类型详解:字符串、列表、字典全解析

在 Python 学习过程中,理解数据类型是基础也是关键。Python 的核心数据类型能够帮助开发者高效处理不同类型的数据,本篇文章将系统介绍三种最常用的数据类型:字符串(String)、列表(List)、字典(Dict),并结合…

【自学笔记】Redis 飞快入门

【自学笔记】Redis 飞快入门pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

做网站工作室名字安徽二建标准

参考链接&#xff1a; Python中的私有变量 我们这里就直奔主题&#xff0c;不做基础铺垫&#xff0c;默认你有一些Python类的基础&#xff0c;大家在看这篇博客的时候&#xff0c;如果基础知识忘了&#xff0c;可以去菜鸟教程 从一个简单的类开始 class A(): #定义一…

强连通,Tarjan,缩点

在本文中,我们用 \(f(x,y)=1\) 来表示 \(x\) 可以到达点 \(y\),用 \(g(x,y)=1\) 表示 \(f(x,y)=1\) 且 \(f(y,x)=1\)。 I、强连通 对于图 \(U\) 上的任意两点 \(x\) 和 \(y\),如果有 \(g(x,y)=1\),那么称 \(x,y\) …

实用指南:K8s日志架构:Sidecar容器实践指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

做网站时量宽度的尺子工具thinkphp做的网站源码

目录结构 全局文件 1.app.json 文件 用来对微信小程序进行全局配置&#xff0c;决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。文件内容为一个 JSON 对象。 1.1 page用于指定小程序由哪些页面组成&#xff0c;每一项都对应一个页面的 路径&#xff08;含文…

企业网站建设综合实训心得wordpress安装系统

http://home.cnblogs.com/blog/转载于:https://www.cnblogs.com/yanyanhappy/archive/2012/09/07/2675050.html

彩票网站自己可以做吗wordpress加密页面访问

文章目录 一、 Zookeeper常用命令1. zk服务命令2. zk客户端命令 二、HBASE常见运维命令1. 集群启动关闭2. 扩容增加regionserver3. 下线regionserver ing 一、 Zookeeper常用命令 例如&#xff1a;ZOOKEEPER_HOME&#xff1a;/opt/zk/zookeeper 1. zk服务命令 1. 启动ZK服务…

Python方案--交互式VR教育应用开发

Python方案--交互式VR教育应用开发pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

纯Qt代码实现onvif协议设备端/onvif设备模拟器/onvif虚拟监控设备/桌面转onvif

一、前言说明 在视频监控系统的开发中,ONVIF(Open Network Video Interface Forum)作为行业标准协议,被广泛应用于设备与平台之间的互联互通。通常我们认为,ONVIF 协议的设备端实现应运行在摄像头等嵌入式下位机上…

高中教做网站的软件表格制作教程 步骤

可能是明月好久没有使用境外服务器挂载境外的云盘缘故吧,今天一个代维客户需要他的Linux服务器挂载谷歌云盘好进行云备份,本来是个很简单的事儿,没想到在rclone连接谷歌云盘的时候卡壳了,可是把明月给难为坏了,搜索到的简体中文教程倒是很多,但没有一个提到这个“坑”,最…

OI 笑传 #13

zatto今天是思维题大手子。 CF2130B 左转这个东西很烦,把它规约掉。 由于是一定要到 \(n\) 的,因此左转之后必须要右转,考虑单位元,也就是左走一格之后往右走一格是怎么个事。也就是多加一倍这两个格子里的数。 考…

*补*““逆元求组合数”(费马小定理

组合数快速求法 #include <bits/stdc++.h> #define ll long long #define MAXN 1010 using namespace std; namespace SHuxinn{ll pri[MAXN];ll ni[MAXN];ll ans1 , ans2;ll pow(ll a , ll b){ll ans = 1 , base…

C# WPF中Binding的 Source属性和ElementName属性有什么区别

好的,这是一个WPF数据绑定中非常核心和常见的问题。Source 和 ElementName 都是用来设置绑定源(即数据的来源)的属性,但它们的应用场景和灵活性有显著区别。 下面通过一个对比表格和详细解释来说明它们的区别。 核…