一、HTTPS 访问配置(自签名证书)
1.1 SSL 与 TLS 简介
SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,安全传输层协议)是用于保障网络通信安全的协议,主要提供私密性、信息完整性和身份认证。TLS 是 SSL 的升级版,目前广泛应用于 HTTPS 协议中。
1.2 HTTPS 工作流程
- 客户端访问 HTTPS 网站(如
https://www.example.com
); - 服务器返回 CA 证书(包含公钥);
- 浏览器验证证书合法性;
- 验证通过后,客户端生成随机数并用公钥加密,发送给服务器;
- 服务器用私钥解密获取随机数;
- 双方使用该随机数进行对称加密通信。
1.3 自签名证书生成
若无需权威机构认证(如测试环境),可生成自签名证书:
shell
# 创建证书存放目录
mkdir /usr/share/nginx/pki/private -p
# 生成私钥(包含公钥和私钥)
cd /usr/share/nginx/pki/private
openssl genrsa -out nginx.key
# 生成证书请求文件(CSR)
cd /usr/share/nginx/
openssl req -new -key ./private/nginx.key -out nginx.csr
# 按提示输入信息(Country、State、Common Name 等,Common Name 建议填域名)
# 生成自签名证书(有效期 3650 天)
openssl x509 -req -days 3650 -in nginx.csr -signkey ./private/nginx.key -out nginx.crt
1.4 Nginx 配置 SSL
在 nginx.conf
中添加 HTTPS 服务配置:
shell
server {
listen 443 ssl; # 监听 443 端口并启用 SSL
server_name www.jx.com; # 域名
# 证书路径
ssl_certificate ../pki/nginx/nginx.crt;
ssl_certificate_key ../pki/nginx/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;
}
}
1.5 测试
使用 curl
测试 HTTPS 连接(-k
忽略证书验证):
shell
curl -k https://192.168.115.111
二、Location 配置
2.1 作用
Location 用于匹配客户端请求的 URI(统一资源标识符),并指定对应的处理规则(如根目录、代理转发等),配置写在 server
块中。
2.2 匹配规则
Location 的语法为:
shell
location [ = | ~ | ~* | ^~ ] uri { ... }
=
:精确匹配(完全一致才匹配);~
:正则匹配,区分大小写;~*
:正则匹配,不区分大小写;^~
:匹配到即停止后续搜索。
2.3 匹配优先级
优先级从高到低为:=
> ^~
> ~
> ~*
> 不带符号的普通匹配。
2.4 配置案例
shell
server {
listen 80;
server_name www.jx.com;
# 精确匹配:仅匹配 www.jx.com/info.html
location = /info.html {
root /usr/share/nginx/html;
}
# 正则匹配:匹配 .jpg/.png 等图片资源
location ~ \.(jpeg|jpg|png|svg)$ {
root /usr/share/nginx/html/images;
}
# ^~ 匹配:匹配 /bbs/ 路径,且停止后续匹配
location ^~ /bbs/ {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
2.5 注意事项
-
URI 末尾的
/
影响匹配:/test
优先匹配目录,若无则匹配文件;/test/
仅匹配目录。 -
return
指令可直接返回状态码或重定向,例如:shell
location /old { return 301 https://www.jx.com/new; # 永久重定向到新地址 }
三、Rewrite 配置
3.1 作用
Rewrite 用于根据正则表达式规则重写 URL,适用于新老域名更替、路径调整 等场景,可配置在 server
、location
或 if
块中。
3.2 语法
shell
rewrite 正则表达式 目标URL [flag];
flag
可选值:last
:重写后重新进入 server 块匹配 location;break
:重写后停止匹配其他规则;redirect
:返回 302 临时重定向;permanent
:返回 301 永久重定向。
3.3 配置案例
shell
server {
listen 80;
server_name www.jx.com;
root /usr/share/nginx/html;
# 将 /search 路径重定向到百度
location /search {
rewrite ^/(.*) https://www.baidu.com redirect; # 临时重定向
}
# 将 /images/xxx.jpg 重写为 /pics/xxx.jpg
location /images {
rewrite /images/(.*) /pics/$1 last; # 重写后重新匹配 location
}
}
3.4 反向引用
正则表达式中的分组(()
)可通过 $1
、$2
等引用,例如:
shell
rewrite ^/user/(\d+)/profile$ /user/profile?id=$1 last;
# 将 /user/123/profile 重写为 /user/profile?id=123