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

Nginx 配置指南:HTTPS 自签名、Location、Rewrite 与状态统计

目录

一、HTTPS 自签名证书配置

1.1 SSL/TLS 基础认知

1.2 HTTPS 工作流程(必背)

1.3 自签名证书生成(OpenSSL 工具)

步骤 1:安装 OpenSSL(默认已装,若未装则执行)

步骤 2:创建证书存储目录

步骤 3:生成私钥文件(含公钥)

步骤 4:生成证书请求文件(CSR)

步骤 5:生成自签名证书(CRT)

1.4 Nginx 配置 HTTPS

配置验证与重启

1.5 HTTPS 测试

二、Location 配置:请求路径匹配

2.1 Location 语法 

2.2 匹配规则与优先级

2.3 关键注意点

2.4 配置案例

2.5 return 指令:直接返回响应

三、Rewrite 配置:URL 重写

3.1 Rewrite 语法

3.2 配置案例(多轮重写)

3.3 if 指令:条件判断

常用条件(condition)

if 指令案例

3.4 autoindex:目录列表展示

四、Nginx 常用变量

4.1 核心变量表


一、HTTPS 自签名证书配置

HTTPS 基于 SSL/TLS 协议实现数据加密传输,自签名证书适合内网测试或非公网场景(公网需使用 CA 机构颁发的证书)。

1.1 SSL/TLS 基础认知

  • SSL(Secure Sockets Layer):网景公司 1990 年开发,用于保障 WWW 通讯安全,核心提供 私密性(数据加密)、完整性(防篡改)、身份认证,后续迭代至 SSLv3。
  • TLS(Transport Layer Security):IETF 1999 年颁布,基于 SSLv3 优化扩展,是当前主流标准(如 TLSv1.2、TLSv1.3)。
  • 协议位置:位于 TCP/IP 协议与应用层协议(如 HTTP)之间,不依赖平台和应用,通用性强。

1.2 HTTPS 工作流程(必背)

  1. 客户端(浏览器)发起 HTTPS 请求(如 https://www.jx.com);
  2. 服务器返回自身的 CA 证书(包含公钥);
  3. 浏览器验证证书合法性(自签名证书需手动信任);
  4. 验证通过后,浏览器生成随机数,用证书中的公钥加密;
  5. 客户端将加密后的随机数发送给服务器;
  6. 服务器用自身私钥解密,获取随机数;
  7. 双方基于该随机数,使用对称加密算法(效率高)传输后续数据;
  8. 浏览器用随机数解密服务器数据,完成通信。

1.3 自签名证书生成(OpenSSL 工具)

OpenSSL 是开源加密工具包,可生成私钥、证书请求文件(CSR)及自签名证书,步骤如下:

步骤 1:安装 OpenSSL(默认已装,若未装则执行)
# CentOS/RHEL 系统
yum install -y openssl
# Ubuntu/Debian 系统
apt install -y openssl
步骤 2:创建证书存储目录
# 统一存储路径,便于 Nginx 引用
mkdir -p /usr/share/nginx/pki/private
步骤 3:生成私钥文件(含公钥)
cd /usr/share/nginx/pki/private
# 生成 2048 位 RSA 私钥(1024 位已不安全,建议 2048/4096 位)
openssl genrsa -out nginx.key 2048# 查看私钥详情(可选)
openssl rsa -in nginx.key -text
步骤 4:生成证书请求文件(CSR)

CSR 包含服务器身份信息,用于向 CA 机构申请证书(自签名时仅作中间文件):

cd /usr/share/nginx/pki
openssl req -new -key ./private/nginx.key -out nginx.csr

执行后需填写身份信息(按实际情况填写,Common Name 需与域名一致):

Country Name (2 letter code) [XX]:CN  # 国家代码,中国填 CN
State or Province Name (full name) []:BJ  # 省份
Locality Name (eg, city) [Default City]:BJ  # 城市
Organization Name (eg, company) [Default Company Ltd]:jx  # 机构/公司名
Organizational Unit Name (eg, section) []:2310  # 部门
Common Name (eg, your name or your server's hostname) []:www.jx.com  # 核心!域名/服务器 hostname
Email Address []:2310@jx.com  # 邮箱
A challenge password []:  # 密码(可选,直接回车跳过)
An optional company name []:jx  # 可选公司名
步骤 5:生成自签名证书(CRT)

用私钥签名 CSR,生成有效期内的证书:

# 有效期 3650 天(约 10 年,可按需调整)
openssl x509 -req -days 3650 -in nginx.csr -signkey ./private/nginx.key -out nginx.crt# 查看证书详情(可选)
openssl x509 -in nginx.crt -text

1.4 Nginx 配置 HTTPS

修改 Nginx 配置文件(通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf),添加 443 端口(HTTPS 默认端口)的 server 块:

server {listen       443 ssl;  # 监听 443 端口,启用 SSLserver_name  www.jx.com;  # 与证书的 Common Name 一致# 引用证书和私钥(路径需与实际生成路径匹配)ssl_certificate      /usr/share/nginx/pki/nginx.crt;ssl_certificate_key  /usr/share/nginx/pki/private/nginx.key;# SSL 会话缓存(提升性能)ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;  # 会话超时时间# 加密套件(优先选择高安全性套件,排除弱加密)ssl_ciphers  HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers  on;  # 优先使用服务器端的加密套件# 业务逻辑(按需调整)location / {root   html;  # 网站根目录index  index.html index.htm;  # 默认首页}
}
配置验证与重启
# 验证配置文件语法是否正确
nginx -t
# 重启 Nginx 使配置生效
systemctl restart nginx

1.5 HTTPS 测试

由于是自签名证书,浏览器会提示 “不安全”(手动信任即可),也可通过 curl 跳过证书验证测试:

# -k 选项:跳过证书合法性校验
curl -k https://192.168.115.111  # 替换为你的服务器 IP/域名

二、Location 配置:请求路径匹配

Location 用于定义 Nginx 如何处理不同路径的请求,核心是匹配规则优先级,写在 server 块内部。

2.1 Location 语法 

location [ = | ~ | ~* | ^~ ] uri {# 匹配后的处理逻辑(如 root、index、rewrite 等)
}
  • URL 与 URI 区别
    • URL(统一资源定位符):如 http://www.jx.com/s?id=1(含协议、域名、参数);
    • URI(统一资源标识符):如 /s(仅路径,Location 匹配的是 URI)。

2.2 匹配规则与优先级

优先级从高到低排序:

符号规则说明示例
=精确匹配(URI 必须完全一致)location = /info.html 仅匹配 www.jx.com/info.html
^~前缀匹配(匹配到后停止后续搜索)location ^~ /bbs/ 匹配 www.jx.com/bbs/ 及子路径
~正则匹配(区分大小写)`location ~ .(jpgpng)$` 仅匹配小写后缀的图片
~*正则匹配(不区分大小写)`location ~* .(jpgPNG)$` 匹配任意大小写后缀的图片
无符号普通前缀匹配(按最长匹配原则,最后生效)location /test 匹配 www.jx.com/testwww.jx.com/test123 等

2.3 关键注意点

  1. 路径末尾的 / 影响

    • location /test:优先匹配 /test 目录,若目录不存在则匹配 /test 文件;
    • location /test/:仅匹配 /test/ 目录(路径必须以 / 结尾)。
  2. root 与 alias 区别(路径映射):

    • root /usr/share/nginx/html:请求 /test/1.jpg 会映射到 /usr/share/nginx/html/test/1.jpg
    • alias /usr/share/nginx/images:请求 /test/1.jpg 会直接映射到 /usr/share/nginx/images/1.jpg(忽略 test 路径)。

2.4 配置案例

server {listen  80;server_name  www.jx.com;# 1. 精确匹配:仅处理 /info.htmllocation = /info.html {root  /usr/share/nginx/html;  # 文件路径:/usr/share/nginx/html/info.html}# 2. 正则匹配(区分大小写):处理图片请求location ~ \.(jpeg|jpg|png|svg)$ {root /usr/share/nginx/html/images;  # 请求 /1.jpg → /usr/share/nginx/html/images/1.jpg}# 3. 前缀匹配(匹配后停止):处理 /bbs/ 路径location ^~ /bbs/ {root  /usr/share/nginx/html;  # 请求 /bbs/index.html → /usr/share/nginx/html/bbs/index.htmlindex index.html index.htm;  # 默认首页}# 4. 普通匹配:处理其他所有路径location / {root   html;index  index.html index.htm;}
}

2.5 return 指令:直接返回响应

return 用于停止请求处理,直接返回状态码或重定向,后续指令不再执行,语法:

return code [text];          # 返回状态码 + 文本(如 404 "Page Not Found")
return code URL;             # 返回状态码 + 重定向(如 302 https://www.baidu.com)
return URL;                  # 默认 302 重定向(如 return https://www.baidu.com)

示例:

# 1. 直接返回 404
location /old {return 404 "This page is deprecated";
}# 2. 临时重定向(302)
location /temp {return 302 https://www.jx.com/new;
}# 3. 永久重定向(301,搜索引擎会更新索引)
location /old-site {return 301 https://www.jx.com/new-site;
}

三、Rewrite 配置:URL 重写

Rewrite 基于正则表达式修改请求的 URI,常用于新老域名更替、路径简化、业务拆分等场景,可写在 serverlocationif 块中。

3.1 Rewrite 语法

rewrite 正则表达式 目标URI [flag];
  • 正则表达式:匹配当前请求的 URI(如 /images/(.*\.jpg)$ 匹配 /images/xxx.jpg);
  • 目标 URI:重写后的路径(如 /pic/$1$1 是正则中括号 (.*\.jpg) 的捕获值,即 xxx.jpg);
  • flag:重写后的行为(可选,常用值如下):
flag作用说明
last重写后发起新请求,重新匹配所有 location(常用于多轮重写)
break重写后停止,不匹配后续 location(常用于单次重写)
redirect返回 302 临时重定向(地址栏会变化)
permanent返回 301 永久重定向(地址栏会变化,搜索引擎更新索引)

3.2 配置案例(多轮重写)

需求:访问 /images/1.jpg → 重写为 /pics/1.jpg → 再重写为 /photos/1.jpg,最终从 /photos 目录获取文件。

server {listen 80;server_name www.jx.com;root /usr/share/nginx/html;  # 根目录# 1. 第一次重写:/images/xxx.jpg → /pics/xxx.jpglocation /images {rewrite /images/(.*) /pics/$1 last;  # last:发起新请求,重新匹配}# 2. 第二次重写:/pics/xxx.jpg → /photos/xxx.jpglocation /pics {rewrite /pics/(.*) /photos/$1 last;}# 3. 最终处理:从 /photos 目录获取文件location /photos {# 无额外逻辑,直接使用 root 路径:/usr/share/nginx/html/photos/xxx.jpg}# 4. 重定向案例:访问 /search 跳转到百度location /search {rewrite ^/(.*) https://www.baidu.com redirect;  # 302 临时重定向}
}

注意:生产环境避免使用 .*(匹配任意字符),可能导致过度匹配,建议精确正则(如 ^/images/)。

3.3 if 指令:条件判断

if 用于根据条件执行 Rewrite 或其他逻辑,语法:

if (condition) {# 条件满足时的操作(如 rewrite、return)
}
常用条件(condition)
条件格式说明示例
$variable变量为空或以 0 开头 → false,否则 trueif ($arg_pid) { ... }(若 URL 有 pid 参数则执行)
$var = value / $var != value变量等于 / 不等于指定值if ($uri = "/images/") { ... }
~ / !~正则匹配 / 不匹配(区分大小写)if ($http_user_agent ~ Chrome) { ... }(Chrome 浏览器)
~* / !~*正则匹配 / 不匹配(不区分大小写)if ($http_user_agent ~* firefox) { ... }(Firefox 浏览器)
-f / !-f文件存在 / 不存在if (!-f $request_filename) { ... }(文件不存在时)
-d / !-d目录存在 / 不存在if (-d $request_filename) { ... }(目录存在时)
-e / !-e文件 / 目录 / 符号链接存在 / 不存在if (!-e $request_filename) { ... }(资源不存在时)
if 指令案例
  1. 根据浏览器类型跳转
location / {# Chrome 浏览器 → /Chrome/xxxif ($http_user_agent ~ Chrome) {rewrite /(.*) /Chrome/$1 break;}# Firefox 浏览器 → /Firefox/xxxif ($http_user_agent ~ Firefox) {rewrite /(.*) /Firefox/$1 break;}
}
  1. 资源不存在时返回 404
location / {if (!-e $request_filename) {return 404 "Resource not found";}
}

3.4 autoindex:目录列表展示

autoindex 用于当请求以 / 结尾且无默认首页时,展示目录下的文件列表,适合静态资源下载站(生产环境混合业务站点禁用,避免暴露目录结构)。

配置示例:

server {listen 80;server_name www.jx.com;location /download/ {root /usr/share/nginx/html;  # 目录路径:/usr/share/nginx/html/download/autoindex on;  # 开启目录列表(off 关闭)autoindex_exact_size off;  # 显示 KB/MB/GB(on 显示字节数)autoindex_format html;  # 以 HTML 格式展示(可选 json/xml)autoindex_localtime on;  # 显示服务器本地时间(off 显示 GMT 时间)}
}

访问 http://www.jx.com/download/ 即可看到目录下的所有文件。

四、Nginx 常用变量

Nginx 内置变量可用于获取请求信息(如客户端 IP、请求方法、协议等),常用于 if 判断、return 响应或日志配置。

4.1 核心变量表

变量名含义示例值
$remote_addr客户端 IP 地址192.168.
http://www.dtcms.com/a/400105.html

相关文章:

  • chn域名网站百度知道登录入口
  • 网站做cpa推广引流苍南具城乡建设局网站
  • 工商网站官网入口做国际网站的流程
  • 广告网站素材青创网站首页
  • 02-基于FPGA和LTC2308的数字电压表设计-模数转换原理
  • 前端网站做多语言wordpress 挖矿脚本
  • 外贸出口营销网站wordpress网站管理系统
  • 网站后台内容更换怎么做百度竞价关键词怎么优化
  • 使用大模型进行chat的时候,这里的max output和context length分别是什么意思?所有的模型的上下文长度排名
  • 单片机相关知识点
  • 网站如何伪静态怎么做新浪网站
  • 【多线程】信号量(Semaphore)常见的应用场景
  • 注册网站账号违法吗莱芜最好的网站建设公司
  • seo关键词排名技巧网站诊断网站seo诊断
  • 月饼杯(web全解)
  • 临床研究三千问——临床研究体系的5库(10)
  • 邢台装修网站建设软件开发八个阶段
  • 烟台网站建设公司地址婚纱摄影网站建设
  • 网站开发培训视频400靓号手机网站建设
  • 百度云加速 网站关键词ftp服务器搭建设置网站信息
  • 打通数字孪生项目的“最后一公里”:筑牢行业智能数字地基,重构产业落地敏捷基因
  • 新乡建设招标投标网站捕鱼游戏源码论坛
  • 路径规划智能小车(论文+源码)
  • 犀牛云网站建设wordpress插件dflip
  • 11.vector的模拟实现
  • 可以在什么网站做二建题目wordpress插件出错
  • 0716网站建设php图书管理系统网站开发
  • 做电子板报的网站企业宣传册文案范文
  • 深圳做公司网站推广的太原网站建设名录
  • 营口电商网站建设企业模板网站vue