当前位置: 代码网 > 服务器>服务器>Linux > 在Linux环境下为Nginx配置HTTPS的完整流程

在Linux环境下为Nginx配置HTTPS的完整流程

2026年09月28日 • Linux •我要评论
前言在本地开发或内网测试环境中,我们常常需要通过 https 访问服务。虽然公网环境常用 let's encrypt,但在本地测试中,使用 openssl 生成“自签名证书&rdq

前言

在本地开发或内网测试环境中,我们常常需要通过 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 并不会让新监听的端口生效(特别是从不监听变为监听时)。

排查验证:

  1. 通过 ./nginx -t 2>&1 | grep -a 20 "listen.*443" 确认配置已加载。
  2. 但 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全攻略的资料请关注代码网其它相关文章!

赞 (0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com