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

 更新时间:2026年09月28日 09:17:08   作者:Mr.4567  
在本地开发或内网测试环境中,我们常常需要通过HTTPS访问服务,虽然公网环境常用 Let's Encrypt,但在本地测试中,使用OpenSSL生成自签名证书是最快捷且免费的方案,本文详细记录了在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 并不会让新监听的端口生效(特别是从不监听变为监听时)。

排查验证:

  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全攻略的资料请关注脚本之家其它相关文章!

相关文章

  • Nginx伪静态配置和常用Rewrite伪静态规则集锦

    Nginx伪静态配置和常用Rewrite伪静态规则集锦

    伪静态是一种可以把文件后缀改成任何可能的一种方法,如果我想把php文件伪静态成html文件,这种相当简单的,下面我来介绍nginx 伪静态配置方法有需要了解的朋友可参考。
    2014-06-06
  • 深入解析nginx路由location匹配规则及其优先级

    深入解析nginx路由location匹配规则及其优先级

    Nginx是一款高性能的Web服务器和反向代理服务器,它的路由功能是通过location指令来实现的,location指令用于匹配请求的URL,并将请求转发到相应的处理程序或静态文件,需要的朋友可以参考下
    2023-10-10
  • Nginx基础入门之gzip配置指南

    Nginx基础入门之gzip配置指南

    众所周知随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,所以下面这篇文章主要给大家介绍了关于Nginx基础入门之gzip配置的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • Nginx访问控制与参数调优的方法

    Nginx访问控制与参数调优的方法

    这篇文章主要介绍了Nginx访问控制与参数调优的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • Nginx中IF语句实现数学比较功能

    Nginx中IF语句实现数学比较功能

    这篇文章主要介绍了Nginx中IF语句实现数学比较功能,即在Nginx中用if判断数字大小,类似编程语言中的逻辑比较,需要的朋友可以参考下
    2015-02-02
  • Nginx服务器中处理AJAX跨域请求的配置方法讲解

    Nginx服务器中处理AJAX跨域请求的配置方法讲解

    这篇文章主要介绍了Nginx服务器中处理AJAX跨域请求的配置方法讲解,包括Nginx作Apache的反向代理时的配置方法,需要的朋友可以参考下
    2016-01-01
  • Nginx源码安装的方法步骤

    Nginx源码安装的方法步骤

    这篇文章主要介绍了Nginx源码安装的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Nginx出现403 Forbidden的四种解决方案分享

    Nginx出现403 Forbidden的四种解决方案分享

    这篇文章主要给大家分享了关于Nginx出现403 Forbidden的四种解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • Nginx处理Web请求机制的方法详解

    Nginx处理Web请求机制的方法详解

    这篇文章主要介绍了Nginx处理Web请求机制的方法,通过对worker抢占机制、传统服务器事件处理机制以及Nginx事件处理机制的对比,详细解析Nginx在处理web请求机制时的逻辑,需要的朋友可以参考下
    2025-04-04
  • Nginx 504 Gateway Time-out的两种最新解决方案

    Nginx 504 Gateway Time-out的两种最新解决方案

    大家在访问网站的时候通常会遇到502错误、404错误等,很少会遇到504错误,但是在我们去访问大流量或者内容数据量较多的网站时,打开网页偶尔就会出现504 gateway time-out,这篇文章主要给大家介绍了关于Nginx 504 Gateway Time-out的两种解决方案,需要的朋友可以参考下
    2022-08-08

最新评论