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

Nginx 核心功能配置:访问控制、用户认证、HTTPS 与 URL 重写等

Nginx 核心功能配置:访问控制、用户认证、HTTPS 与 URL 重写等

一、访问控制配置

访问控制通过 allow(允许)和 deny(拒绝)指令实现,用于限制特定 IP 或 IP 段对 Nginx 资源的访问,通常配置在 location 段中。

1.1 拒绝单个 IP 访问指定资源

场景:禁止 IP 为 192.168.100.111 的主机访问 /status 状态页面。

配置示例

server {listen 80;server_name localhost;# 拒绝 192.168.100.111 访问 /statuslocation /status {echo "Nginx Status Page"; # 自定义返回内容(或结合 stub_status)deny 192.168.100.111; # 拒绝指定 IPallow all; # 允许其他所有 IP(默认隐含,可显式声明)}}

1.2 仅允许单个 IP 访问指定资源

场景:仅允许 192.168.100.111 访问 /status 状态页面,拒绝其他所有 IP。

配置示例(结合 stub_status 模块):

server {listen 80;server_name localhost;# 仅允许 192.168.100.111 访问 /status(Nginx 状态页)location /status {stub_status on; # 开启 Nginx 状态监控(需模块支持)allow 192.168.100.111; # 允许指定 IPdeny all; # 拒绝其他所有 IP(必须放在最后)}}

1.3 stub_status 模块说明

stub_status 是 Nginx 内置模块,用于查看服务器的实时连接状态,需在 location 中开启。

1.3.1 状态页输出内容解析

访问 http://[Nginx 服务器 IP]/status,返回内容如下:

Active connections: 1server accepts handled requests14 14 14Reading: 0 Writing: 1 Waiting: 0

各字段含义:

  • Active connections:当前 Nginx 正在处理的活动连接数。
  • accepts:累计处理的总连接数。
  • handled:累计成功建立的 TCP 握手次数(通常与 accepts 一致,除非资源耗尽)。
  • requests:累计处理的 HTTP 请求数。
  • Reading:Nginx 正在读取客户端请求头的连接数。
  • Writing:Nginx 正在向客户端写入响应头的连接数。
  • Waiting:开启 Keep-Alive 后,等待客户端下一次请求的空闲连接数(计算公式:Active - Reading - Writing)。

二、用户认证配置

用户认证通过 auth_basic 指令实现,访问指定资源时需输入用户名和密码,依赖加密的用户密码文件(推荐用 htpasswd 生成)。

2.1 步骤 1:安装 htpasswd 工具

htpasswd 是 Apache 工具集的一部分,用于生成加密的用户密码文件,需先安装:

# CentOS/RHEL 系统yum -y install httpd-tools# Ubuntu/Debian 系统apt-get install apache2-utils

2.2 步骤 2:生成用户密码文件

# 语法:htpasswd -c(创建新文件)-m(MD5 加密)[文件路径] [用户名]htpasswd -c -m /usr/local/nginx/conf/.user_auth sl# 执行后输入密码(如 123456),文件内容示例:# sl:$apr1$xxxx$xxxxxxxxxxxxxxxxxxxxxxxxx(MD5 加密后的密码)
  • 若需添加多个用户,去掉 -c 选项(避免覆盖现有文件):htpasswd -m /usr/local/nginx/conf/.user_auth user2。

2.3 步骤 3:配置 Nginx 用户认证

场景:访问 /status 状态页时要求输入用户名和密码。

配置示例

server {listen 80;server_name localhost;location /status {stub_status on;auth_basic "Welcome to Nginx Status Page"; # 认证弹窗提示信息auth_basic_user_file "/usr/local/nginx/conf/.user_auth"; # 密码文件路径}}

2.4 验证效果

  1. 检查配置文件语法:nginx -t
  2. 重载 Nginx 配置:nginx -s reload
  3. 浏览器访问 http://[Nginx 服务器 IP]/status,会弹出用户名 / 密码输入框,输入正确后才可访问。

三、HTTPS 配置(SSL 证书)

HTTPS 需通过 SSL 证书实现加密传输,配置步骤分为「CA 根证书生成」「服务器证书签名」「Nginx 启用 HTTPS」三部分。

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

假设 CA 服务器 IP 为 192.168.100.20,Nginx 服务器 IP 为 192.168.100.10。

  1. 生成 CA 私钥(权限 077,避免泄露):
cd /etc/pki/CA(umask 077; openssl genrsa -out private/cakey.pem 2048)

    2.生成 CA 根证书(有效期 1024 天):

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 1024

执行后需输入信息(国家、地区、公司等,后续服务器证书需与这些信息一致):

Country Name (2 letter code) [XX]:CNState or Province Name (full name) []:HBLocality Name (eg, city) [Default City]:WHOrganization Name (eg, company) [Default Company Ltd]:LQOrganizational Unit Name (eg, section) []:linuxCommon Name (eg, your name or your server's hostname) []:ca.mycompany.comEmail Address []:admin@mycompany.com

  3.初始化 CA 证书数据库:

echo 01 > serial # 证书序列号起始值touch index.txt # 证书索引文件

3.2 步骤 2:在 Nginx 服务器生成证书请求(CSR)

  1. 生成 Nginx 服务器私钥:
cd /usr/local/nginx/conf(umask 077; openssl genrsa -out httpd.key 2048)

     2.生成证书请求文件(CSR):

openssl req -new -key httpd.key -days 1024 -out httpd.csr

输入信息需与 CA 根证书一致(Common Name 填 Nginx 服务器域名 / IP,如 www.mycompany.com)。

3.3 步骤 3:CA 服务器签名 Nginx 证书

  1. 将 Nginx 服务器的 CSR 文件上传到 CA 服务器:
# 在 Nginx 服务器执行scp httpd.csr root@192.168.100.20:/root/

     2.CA 服务器签名证书(生成 CRT 文件):

# 在 CA 服务器执行openssl ca -in /root/httpd.csr -out /root/httpd.crt -days 1024

执行过程中输入 y 确认签名。

3.4 步骤 4:Nginx 启用 HTTPS

  1. 将签名后的证书和 CA 根证书传回 Nginx 服务器:
# 在 CA 服务器执行scp /root/httpd.crt root@192.168.100.10:/usr/local/nginx/conf/scp /etc/pki/CA/cacert.pem root@192.168.100.10:/usr/local/nginx/conf/

    2.修改 Nginx 配置文件(启用 443 端口):

server {listen 443 ssl; # 监听 HTTPS 默认端口 443server_name www.mycompany.com; # Nginx 服务器域名/IP# SSL 证书配置ssl_certificate httpd.crt; # 服务器签名证书ssl_certificate_key httpd.key; # 服务器私钥ssl_session_cache shared:SSL:1m; # SSL 会话缓存(1MB,约 4000 会话)ssl_session_timeout 5m; # SSL 会话超时时间ssl_ciphers HIGH:!aNULL:!MD5; # 加密套件(优先高安全性)ssl_prefer_server_ciphers on; # 优先使用服务器端加密套件# 网站根目录与默认页location / {root html;index index.html index.htm;}}# 可选:HTTP 自动跳转 HTTPS(80 端口重定向到 443)server {listen 80;server_name www.mycompany.com;return 301 https://$host$request_uri; # 永久重定向到 HTTPS}

   3.验证配置并重载 Nginx:

nginx -t # 检查语法nginx -s reload # 重载配置

3.5 验证 HTTPS 访问

  1. 客户端浏览器访问 https://www.mycompany.com(自签证书需手动信任)。
  2. 命令行验证(跳过证书校验):
curl -k https://192.168.100.10 # -k 忽略证书有效性检查

四、Rewrite 重写(URL 跳转)

Rewrite 用于实现 URL 重定向或路径伪装,依赖正则表达式和 Flag 标记,支持在 server、location、if 段中配置。

4.1 核心语法

rewrite <正则表达式> <目标路径/URL> [Flag];
  • 正则表达式:匹配客户端请求的 URI(如 ^/imgs/(.*\.jpg)$ 匹配 /imgs/ 下的所有 JPG 图片)。
  • 目标路径 / URL:匹配成功后跳转的地址(可使用 $1、$2 等变量引用正则捕获的内容)。
  • Flag 标记:控制跳转行为,常用标记如下:

Flag

作用说明

last

执行当前规则后,继续匹配后续 location 规则(常用于 server/if 段)。

break

执行当前规则后终止,不匹配后续规则(常用于 location 段)。

redirect

返回 302 临时重定向(浏览器地址栏显示新 URL,适用于临时跳转)。

permanent

返回 301 永久重定向(浏览器缓存跳转规则,适用于域名更换等场景)。

4.2 常见应用场景

4.2.1 路径伪装(隐藏真实路径)

场景:客户端访问 /imgs/linux.jpg,实际读取服务器 /images/linux.jpg(路径不变,内容指向真实文件)。

配置示例

server {listen 80;server_name localhost;root /usr/local/nginx/html; # 网站根目录location /imgs {# 正则捕获 /imgs/ 后的内容(如 linux.jpg),指向 /images/$1rewrite ^/imgs/(.*\.jpg)$ /images/$1 break;}# 真实图片路径(客户端不可见)location /images {# 无需额外配置,直接读取 root 下的 /images 目录}}
4.2.2 域名跳转(旧域名指向新域名)

场景:访问旧域名 www.cy.com 时,自动跳转至新域名 www.chenyu.com,并保留路径参数(如 www.cy.com/test 跳转至 www.chenyu.com/test)。

配置示例

server {listen 80;server_name www.cy.com; # 旧域名location / {# $host 为当前请求域名,$1 捕获 / 后的所有路径rewrite ^/(.*)$ https://www.chenyu.com/$1 permanent;}}server {listen 80;server_name www.chenyu.com; # 新域名root /var/www/chenyu;index index.html;}
4.2.3 多规则链式跳转

场景:访问 /imgs/linux.jpg 时,先跳转至 /images/linux.jpg,再跳转至百度图片。

配置示例(使用 last 标记):

server {listen 80;server_name localhost;root /usr/local/nginx/html;location /imgs {rewrite ^/imgs/(.*\.jpg)$ /images/$1 last; # last 继续匹配后续规则}location /images {rewrite ^/images/(.*\.jpg)$ http://image.baidu.com break; # break 终止}}

五、If 判断配置

If 用于根据条件执行不同逻辑,支持变量比较、正则匹配、文件 / 目录判断等,仅支持单条件(无 else),可在 server 或 location 段中配置。

5.1 常见条件表达式

条件类型

语法示例

说明

变量比较

if ($remote_addr = "192.168.100.20")

客户端 IP 等于指定值

正则匹配

if ($http_user_agent ~ Chrome)

客户端浏览器包含 Chrome(区分大小写)

非正则匹配

if ($http_user_agent ~* Firefox)

客户端浏览器包含 Firefox(不区分大小写)

文件判断

if (-f $request_filename)

请求路径是否为文件

目录判断

if (-d $request_filename)

请求路径是否为目录

文件存在

if (!-e $request_filename)

请求路径是否不存在(! 表示否定)

5.2 应用场景:基于 IP 的维护页跳转

场景:网站维护时,仅允许公司 IP(192.168.100.20)访问正常页面,其他 IP 跳转至维护页 /weihu.html。

配置示例

server {listen 80;server_name www.cy.com;root /var/www/html;# 定义变量 $rewrite,默认 true(需要跳转)set $rewrite true;# 公司 IP 不跳转(设置 $rewrite 为 false)if ($remote_addr = "192.168.100.20") {set $rewrite false;}# 非公司 IP 跳转至维护页if ($rewrite = true) {rewrite ^(.*)$ /weihu.html break;}# 维护页路径location = /weihu.html {root /var/www/html; # 维护页所在目录index weihu.html;}# 正常页面路径location / {index index.html;}}

准备维护页

echo "weihu" > /var/www/html/weihu.html

六、基于浏览器的页面分离

通过 $http_user_agent 变量识别客户端浏览器类型(如 Chrome、Firefox),跳转至对应页面目录,实现浏览器差异化展示。

6.1 配置步骤

  1. 创建浏览器专属页面目录
cd /usr/local/nginx/htmlmkdir chrome firefox # Chrome 和 Firefox 页面目录echo "<h1>Chrome 专属页面</h1>" > chrome/index.htmlecho "<h1>Firefox 专属页面</h1>" > firefox/index.html

     2.Nginx 配置浏览器判断

server {listen 80;server_name localhost;root /usr/local/nginx/html;location / {# 匹配 Firefox 浏览器(不区分大小写)if ($http_user_agent ~* Firefox) {rewrite ^(.*)$ /firefox/$1 break; # 跳转到 Firefox 专属目录}# 匹配 Chrome 浏览器(不区分大小写)if ($http_user_agent ~* Chrome) {rewrite ^(.*)$ /chrome/$1 break; # 跳转到 Chrome 专属目录}# 其他浏览器显示默认页面index index.html index.htm;}# 配置 Firefox 专属页面的访问路径location /firefox {root /usr/local/nginx/html;index index.html;}# 配置 Chrome 专属页面的访问路径location /chrome {root /usr/local/nginx/html;index index.html;}}

6.2 验证效果

  1. 重载 Nginx 配置:nginx -s reload
  2. 使用 Chrome 浏览器访问 http://[Nginx 服务器 IP],显示 “Chrome 专属页面”;
  3. 使用 Firefox 浏览器访问,显示 “Firefox 专属页面”;
  4. 使用 Edge、Safari 等其他浏览器访问,显示默认 index.html 内容。

七、防盗链配置

防盗链基于 HTTP 请求头中的 Referer 字段实现,仅允许指定域名(如自身域名)引用资源,阻止其他网站 “盗用” 图片、视频等静态资源。

7.1 核心原理

  • Referer 字段:客户端向服务器请求资源时,会在请求头中携带 Referer,告知服务器 “当前资源是从哪个页面链接过来的”(如从 www.cy.com 页面引用图片,则 Referer: http://www.cy.com)。
  • 防盗链逻辑:通过 valid_referers 定义 “合法 Referer 列表”,若请求的 Referer 不在列表中,判定为 “盗链”,返回 403 禁止访问。

7.2 核心语法

location ~* \.(资源后缀1|资源后缀2)$ {valid_referers none blocked server_names 合法域名/正则;if ($invalid_referer) {return 403; # 盗链时返回 403# 或返回自定义“盗链提示图片”:rewrite ^/ /error.png break;}}
  • valid_referers 参数说明:
    • none:允许无 Referer 的请求(如直接在浏览器输入资源 URL);
    • blocked:允许 Referer 被防火墙 / 代理隐藏的请求(无协议头的 Referer);
    • server_names:允许当前 server_name 对应的域名(即自身域名);
    • 合法域名/正则:自定义允许的域名(如 www.cy.com)或正则(如 ~\.chenyu\.com 匹配所有 chenyu.com 子域名)。
  • $invalid_referer:Nginx 内置变量,valid_referers 匹配失败时为 true,匹配成功时为 false。

7.3 应用场景:图片资源防盗链

场景:仅允许 www.cy.com 和 www.chenyu.com 引用服务器的 JPG/PNG/GIF 图片,其他域名引用时返回 403。

7.3.1 步骤 1:准备测试环境
  1. 在 Nginx 网站根目录上传测试图片:
cd /usr/local/nginx/htmlwget https://example.com/linux.jpg # 假设下载一张名为 linux.jpg 的图片
  1. 在 “盗链测试网站”(如 www.other.com)的页面中引用该图片:
<!-- 盗链页面:www.other.com/index.html --><h1>盗链测试</h1><img src="http://www.cy.com/linux.jpg"> <!-- 引用 www.cy.com 的图片 -->
7.3.2 步骤 2:配置 Nginx 防盗链
server {listen 80;server_name www.cy.com;root /usr/local/nginx/html;# 对 JPG/PNG/GIF 图片配置防盗链location ~* \.(jpg|png|gif)$ {# 合法 Referer 列表:无 Referer、自身域名、www.chenyu.comvalid_referers none blocked server_names www.chenyu.com;# 盗链处理:返回 403if ($invalid_referer) {return 403;}}location / {index index.html;}}
7.3.3 步骤 3:验证防盗链效果
  1. 合法访问验证
    • 在 www.cy.com 页面中引用 linux.jpg(Referer: http://www.cy.com),图片正常显示;
    • 直接在浏览器输入 http://www.cy.com/linux.jpg(无 Referer),图片正常显示。
  1. 盗链验证
    • 访问 www.other.com 的盗链页面,图片无法加载,浏览器控制台显示 “403 Forbidden”;
    • 使用 curl 模拟盗链请求(指定非法 Referer):
curl --referer http://www.other.com -I http://www.cy.com/linux.jpg# 返回结果包含“HTTP/1.1 403 Forbidden”,说明防盗链生效

7.4 进阶:盗链返回自定义图片

若需对盗链请求返回 “盗链提示图片”(而非直接 403),可修改配置如下:

location ~* \.(jpg|png|gif)$ {valid_referers none blocked www.cy.com;if ($invalid_referer) {# 盗链时返回 /error.png(需提前准备该图片)rewrite ^/ /error.png break;}}

八、配置验证与重载命令汇总

所有配置修改后,需执行以下命令确保配置正确并生效:

  1. 检查 Nginx 配置语法:nginx -t

(输出 nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful 表示语法正确)

     2.重载 Nginx 配置:nginx -s reload

(平滑重载,不中断现有连接)

     3.查看 Nginx 状态:systemctl status nginx 或 ps -ef | grep nginx

九、总结

本文覆盖 Nginx 7 大核心功能,配置逻辑与应用场景总结如下:

功能模块

核心指令 / 模块

典型应用场景

访问控制

allow/deny

限制特定 IP 访问状态页、管理后台

用户认证

auth_basic/htpasswd

保护敏感资源(如状态页、API 接口)

HTTPS

ssl_certificate/listen 443

网站加密传输,满足安全合规(如电商)

Rewrite 重写

rewrite/Flag(last/break)

域名跳转、路径伪装、动态 URL 静态化

If 判断

if (condition)

基于 IP / 浏览器的差异化逻辑(维护页)

浏览器分离

$http_user_agent

为不同浏览器提供专属页面(适配需求)

防盗链

valid_referers/$invalid_referer

保护静态资源(图片、视频)不被盗用

实际生产环境中,可根据业务需求组合使用上述功能(如 “HTTPS + 用户认证 + 访问控制” 保护后台系统),同时需注意配置语法正确性与性能优化(如避免过多 if 判断、合理使用 break/last 标记)。

http://www.dtcms.com/a/419848.html

相关文章:

  • 大模型显存占用完全指南:从训练到推理的计算公式与实战案例(建议收藏)
  • 惠州做网站采招网招标官网
  • 烟台做网站找哪家好哪个网站可以做海报
  • 【星海出品】计算机科学之磁盘数据读取时间逻辑
  • 模力通AI风格仿写 让公文写作告别“风格焦虑”
  • 构建AI智能体:四十七、Agent2Agent多智能体系统:基础通信与任务协作实现
  • 天猫建设网站的意义张家港网站建设做网站
  • python爬虫进阶版练习(只说重点,selenium)
  • 东莞网站设计教程为企业做好服务保障
  • 福州网站建设q.479185700強网页翻译网站
  • 134、【OS】【Nuttx】【周边】效果呈现方案解析:端口映射(三)
  • 网站开发 报价单网站源码asp
  • Java HHH000490: Using JtaPlatform implementation
  • 网站关键词检测郑州外贸网站推广
  • 苏州网站开发的企业wordpress 结合qq
  • 在Linux中安装应用
  • 【高级语言范型介绍】
  • android 权限申请封装类
  • 个人习惯的各类chat大模型的使用场景
  • 济南网站建设与优化网站建设验收报告范本
  • 汕头网页设计网站方案网络下载的网站模板能直接上传到虚拟主机
  • C++ 异步任务详解:future, promise, async
  • 【MySQL 高阶】MySQL 程序详解
  • Cloudreve 性能卡顿?对接雨云对象存储,实现上传下载“满速飞”
  • 解锁机器人导航的全模态潜能!OmniVLA:机器人导航的全模态视觉-语言-动作模型
  • 制作一个买股票的网站怎么做网站空间与服务器
  • java-IO流-字节流
  • 为什么要学习C编程?
  • 外贸网站建设书籍东南亚营销型网站建设与网络推广
  • 烟台市政建设招标网站自己电脑做网站必须装jdk