在Linux环境下为Nginx配置HTTPS的完整流程
前言
在本地开发或内网测试环境中,我们常常需要通过 HTTPS 访问服务。虽然公网环境常用 Let's Encrypt,但在本地测试中,使用 OpenSSL 生成“自签名证书”是最快捷且免费的方案。
本文详细记录了在 Linux 环境下,为 Nginx 配置 HTTPS 的完整步骤,以及配置过程中遇到的 配置重复报错、重启失效 等真实问题的排查与解决思路。
一、 环境准备
在开始之前,请确保你的 Nginx 编译了 SSL 模块。
# 检查是否安装 nginx -v # 检查是否包含 SSL 模块 nginx -V 2>&1 | grep -- '--with-http_ssl_module'
如果命令没有回显 --with-http_ssl_module,说明当前 Nginx 不支持 SSL,需重新编译或通过包管理器安装带 SSL 的版本。
二、 生成免费的自签名证书
本地测试推荐直接用 OpenSSL 生成,无需域名即可通过 IP 访问。
1. 创建证书存放目录
sudo mkdir -p /usr/local/nginx/conf/ssl
2. 生成私钥与证书(有效期10年)
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout /usr/local/nginx/conf/ssl/server.key \
-out /usr/local/nginx/conf/ssl/server.crt执行后会提示输入地区信息,测试环境可直接连续按回车跳过,或在 Common Name 处填入你的服务器 IP。
3. 收紧文件权限
sudo chmod 600 /usr/local/nginx/conf/ssl/server.key sudo chmod 644 /usr/local/nginx/conf/ssl/server.crt
三、 Nginx 配置详解
编辑 Nginx 配置文件,以下是本次部署沉淀下来的测试环境通用模板。
server {
listen 443 ssl;
server_name localhost;
# 证书路径
ssl_certificate /usr/local/nginx/conf/ssl/server.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/server.key;
# 安全策略:只开启 TLSv1.2 和 v1.3
ssl_protocols TLSv1.2 TLSv1.3;
# 加密套件:只用高强度算法,禁用匿名和MD5
ssl_ciphers HIGH:!aNULL:!MD5;
# 优先使用服务器端加密顺序
ssl_prefer_server_ciphers on;
# 性能优化:开启会话缓存(1MB约存4000个会话)
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 反向代理或静态资源目录
location / {
root html/sz;
index index.html index.htm;
try_files $uri $uri/ /main.html;
}
}关键指令白话释义:
- ssl_protocols:只允许安全的协议,禁止已淘汰的 SSLv2/3 和 TLSv1.0/1.1。
- ssl_ciphers:过滤掉弱加密算法,防止数据被破解。
- ssl_session_cache:缓存握手信息,避免客户端二次连接时重新握手,提升访问速度。
四、 踩坑记录与排查
在配置过程中,遇到了两个典型错误,供大家避坑。
坑点 :Nginx 语法正确但 443 端口未监听
现象:
执行 nginx -t 返回成功,但 netstat -tlnp | grep 443 没有任何输出。
核心原因:
这是最容易踩的坑。在修改配置文件并添加 443 的 server 块后,执行 ./nginx -s reload 并不会让新监听的端口生效(特别是从不监听变为监听时)。
排查验证:
- 通过
./nginx -T 2>&1 | grep -A 20 "listen.*443"确认配置已加载。 - 但
ss -tlnp | grep nginx下依然只有 80 端口。
终极解法:
使用完全的停止+启动代替 reload。
# 1. 彻底停止服务 ./nginx -s stop # 2. 确认进程已消失 ps aux | grep nginx # 3. 重新启动 ./nginx # 4. 验证端口 netstat -tlnp | grep 443
五、 浏览器验证
因为是自签名证书,浏览器会提示“您的连接不是私密连接”或“不安全”。
- Chrome/Edge:点击“高级” -> “继续前往 (不安全)”。
- 终端测试:
curl -k https://你的服务器IP或localhost
- 只要能返回网页内容,说明 HTTPS 配置成功。
总结
本文梳理了 Nginx 配置 HTTPS 的完整链路,特别指出了“新增端口必须重启而非重载”的隐蔽坑点。希望这份记录能帮助其他开发者在本地测试中少走弯路。
以上就是在Linux环境下为Nginx配置HTTPS的完整流程的详细内容,更多关于Nginx配置HTTPS全攻略的资料请关注脚本之家其它相关文章!
相关文章
Nginx 504 Gateway Time-out的两种最新解决方案
大家在访问网站的时候通常会遇到502错误、404错误等,很少会遇到504错误,但是在我们去访问大流量或者内容数据量较多的网站时,打开网页偶尔就会出现504 gateway time-out,这篇文章主要给大家介绍了关于Nginx 504 Gateway Time-out的两种解决方案,需要的朋友可以参考下2022-08-08


最新评论