nginx修改https协议+生成.pem公钥和.key私钥
server {
# 1. 核心修改:将普通listen改为HTTPS监听(443是HTTPS默认端口,也可保留12355并添加ssl标识)
# 两种写法可选:
# 写法1:使用HTTPS默认端口443(推荐,浏览器可直接通过https://域名访问,无需输入端口)
listen 443 ssl;
# 写法2:保留原12355端口,开启HTTPS(访问时需输入https://localhost:12355)
# listen 8089 ssl;
# 2. 新增必备配置:指定SSL证书文件路径(核心,HTTPS依赖证书验证)
# 替换为你的SSL证书公钥文件实际路径(.pem或.crt格式)
ssl_certificate /path/to/your/ssl-certificate.pem;
# 替换为你的SSL证书私钥文件实际路径(.key格式,需妥善保管,不可公开)
ssl_certificate_key /path/to/your/ssl-private-key.key;
关键说明(必看)
listen指令修改核心:
普通 HTTP 监听仅需指定端口(如listen 8089;),而 HTTPS 监听必须添加ssl标识(格式:listen 端口 ssl;),告知 Nginx 该端口启用 SSL/TLS 协议。-
SSL 证书文件要求(缺一不可):
ssl_certificate:指定公钥文件路径,常见格式为.pem、.crt,是公开可对外的证书文件。ssl_certificate_key:指定私钥文件路径,常见格式为.key,是私密文件,需保证 Nginx 进程有读取权限,且不可泄露给第三方。- 证书来源:
- 生产环境:从正规 CA 机构(如 Let's Encrypt(免费)、阿里云、腾讯云等)申请。
- 测试 / 本地环境:可通过
openssl工具自签名证书(仅用于测试,浏览器会提示不安全)。
- 可选优化配置的作用:
配置ssl_protocols、ssl_ciphers等参数,是为了禁用不安全的协议和加密套件,避免被黑客利用漏洞攻击,同时提升 HTTPS 连接的性能和兼容性。
配置生效步骤
- 保存修改后的 Nginx 配置文件。
- 检查配置语法是否正确:
nginx -t(若配置错误,会提示具体错误位置)。 - 重新加载 Nginx 配置(不中断服务):
nginx -s reload。 - 若 Nginx 未启动,直接启动:
nginx。
五、验证是否生效
访问地址(根据你的配置选择):
- 若使用 443 端口:
https://localhost(或https://你的域名) - 若保留 8089 端口:
https://localhost:8089
若浏览器能正常加载页面,且地址栏显示 “小锁” 图标(测试证书会显示黄色感叹号,属正常现象),说明 HTTPS 配置生效。
总结
- HTTPS 监听的核心是
listen 端口 ssl;指令,必须添加ssl标识。 - 配置
ssl_certificate和ssl_certificate_key指定证书和私钥路径是 HTTPS 生效的前提。 - 推荐添加 HTTP 跳转 HTTPS 的配置,提升用户访问体验。
- 配置修改后需通过
nginx -t校验语法,再用nginx -s reload生效。
生成.pem公钥和.key私钥
你需要生成用于测试的 HTTPS 自签名证书(包含.pem公钥和.key私钥),最常用且便捷的工具是openssl,下面我会详细介绍完整的生成步骤、操作说明和后续使用注意事项。
一、前提条件
确保你的系统已安装
openssl工具:
- Linux/macOS:绝大多数系统默认自带,可直接在终端输入
openssl version验证(显示版本信息即表示已安装)。 - Windows:需手动安装 OpenSSL(可从OpenSSL 官网(https://www.openssl.org/)下载,或通过 Git Bash、WSL 环境使用,推荐 WSL 更便捷)。
二、核心命令(一步生成 key 和 pem)
直接在终端执行以下命令,即可一次性生成私钥文件(
.key)和自签名公钥证书文件(.pem),无需额外步骤:openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /home/abc/nginx/ssl/nginx_test.key -out /home/abc/nginx/ssl/nginx_test.pem
三、命令参数详细解释(理解每个选项的作用)
| 参数 | 含义说明 |
|---|---|
req |
OpenSSL 的核心子命令,用于处理证书请求(生成、验证等),这里用于生成自签名证书 |
-x509 |
指定生成自签名证书(而非证书请求文件 CSR),x509 是 SSL/TLS 证书遵循的标准格式 |
-nodes |
表示不对生成的私钥文件进行加密(省略该参数会要求设置私钥密码,Nginx 使用时每次重启都要输入密码,测试环境无需加密),nodes = no DES(不使用 DES 加密算法) |
-days 365 |
指定证书的有效期限为 365 天(可自定义,如3650表示 10 年),过期后需重新生成 |
-newkey rsa:2048 |
同时生成新的私钥和证书请求,采用 RSA 加密算法,密钥长度 2048 位(安全性足够,也可设置为 4096 位,加密强度更高但性能略有损耗) |
-keyout nginx_test.key |
指定生成的私钥文件的名称和路径(这里生成当前目录下的nginx_test.key,可自定义路径如/home/szzc/ssl/nginx_test.key) |
-out nginx_test.pem |
指定生成的自签名公钥证书文件的名称和路径(这里生成当前目录下的nginx_test.pem,可自定义路径如/home/szzc/ssl/nginx_test.pem) |
四、执行命令后的交互配置(按需填写,测试环境可简化)
执行上述命令后,终端会提示你填写一系列证书相关信息,测试环境下无需严格填写,大部分字段可直接回车跳过,仅需注意 2 个关键项:
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:CN # 可选,填写国家代码,如中国填CN State or Province Name (full name) [Some-State]:Beijing # 可选,填写省份/州 Locality Name (eg, city) []:Beijing # 可选,填写城市 Organization Name (eg, company) [Internet Widgits Pty Ltd]:Test # 可选,填写组织/公司名称 Organizational Unit Name (eg, section) []:Test # 可选,填写部门名称 Common Name (e.g. server FQDN or YOUR name) []:localhost # 关键!填写域名/主机名,测试环境填localhost(或你的服务器IP) Email Address []:test@localhost.com # 可选,填写邮箱地址
关键注意点:
Common Name(通用名称)是浏览器验证证书的核心字段,必须与你后续访问 Nginx 的地址一致:- 若后续访问
https://localhost:8089,则填localhost; - 若后续访问
https://192.168.1.100:8089(服务器内网 IP),则填该 IP 地址; - 若填错,浏览器访问时会提示 “证书与站点不匹配” 的安全错误。
五、生成结果验证
执行完成后,在当前终端所在目录(或你指定的自定义路径),会出现两个文件:
nginx_test.key:私钥文件(私密,不可泄露,需保证 Nginx 进程有读取权限);nginx_test.pem:自签名公钥证书文件(可公开,用于 Nginx 配置)。
可通过
ls命令(Linux/macOS)或dir命令(Windows)查看文件是否存在。六、后续对接 Nginx 配置(关键衔接)
- 将生成的
nginx_test.key和nginx_test.pem移动到安全的目录(推荐专门创建 SSL 目录,如/home/abc/ssl/):
mkdir -p /home/abc/ssl mv nginx_test.key nginx_test.pem /home/abc/ssl/
2.给文件设置合理权限(Nginx 进程需读取,避免过宽权限泄露私钥):
chmod 644 /home/abc/ssl/nginx_test.pem # 公钥可公开读取 chmod 600 /home/abc/ssl/nginx_test.key # 私钥仅所有者可读写
3.修改 Nginx 配置中的证书路径,对应到生成的文件:
ssl_certificate /home/abc/ssl/nginx_test.pem; ssl_certificate_key /home/abc/ssl/nginx_test.key;
注意事项(测试环境专属)
- 自签名证书仅用于本地测试 / 开发环境,生产环境必须使用正规 CA 机构(如 Let's Encrypt、阿里云、腾讯云)颁发的证书,否则浏览器会提示 “连接不安全”,且无法通过公网环境的安全校验。
- 访问时浏览器出现安全警告(如 Chrome 显示 “您的连接不是私密连接”)是正常现象,可选择 “高级”->“继续访问”(不同浏览器操作略有差异),即可进入页面。
- 若证书过期,直接重新执行本文的核心命令,生成新的证书替换原有文件即可。
总结
- 测试用 SSL 证书核心命令:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout 私钥.key -out 证书.pem。 - 关键参数
-x509(自签名)、-nodes(私钥不加密)、-newkey rsa:2048(生成 RSA 密钥)缺一不可。 Common Name需与访问地址一致,证书生成后需配置正确的 Nginx 路径和文件权限。- 自签名证书仅用于测试,生产环境需使用正规 CA 证书。

浙公网安备 33010602011771号