Nginx 配置SSL证书

发布时间:10/22/2025
更新时间:10/22/2025
展示:393

安装证书的前提

1. SSL证书
如果你使用的是各大云服务器厂商,可以在SSL证书菜单栏找到证书并下载。
或者去网上查找免费的SSL证书,免费证书一般有效期比较短,基本在90天左右。也有一些有效期长的免费证书,需要自行去查找。
还有就是各大云服务器厂商的控制台一般都可以获取免费的SSL证书,可以看看。

2. 上传文件到服务器的工具
云服务器一般都有终端平台,可以登录到服务器的终端平台,使用终端工具上传文件。
也可以使用第三方工具,如XFTP、WinSCP等。我使用的是XFTP,需要安装XFTP教程以及使用XFTP远程连接服务器教程可以看这个:Xftp 安装教程(详细步骤)

上传 SSL 证书

首先下载 SSL 证书。下载完成后,里面会有包含后缀为 *.crt*.pem*.key 这三个文件。其中:

  1. *.crt*.pem 是证书文件。我们只需要其中一个就够了。
  2. *.key 是私钥文件。这是必须的文件

*.key 文件是必须上传的,*.crt*.pem 选择其中一个上传就可以了,我这里选择的是 *.crt 文件。

*.key*.crt 文件上传到服务器的 /etc/nginx 目录下。Nginx 默认的配置文件也在这个目录下:/etc/nginx/nginx.conf

配置 Nginx 服务器证书

编辑 Nginx 默认配置文件。

vim /etc/nginx/nginx.conf

# 或者你使用的是额外配置文件
vim /etc/nginx/conf.d/your_domain.conf

将下面的配置内容粘贴到配置文件中,其中 server_namessl_certificatessl_certificate_key,这三个配置是需要修改的。proxy_pass 配置根据你的应用程序自行修改

# 配置 HTTPS 服务器
server {
  listen 443 ssl;
  server_name your_domain.com www.your_domain.com;

  # 配置 SSL 证书
  ssl_certificate /etc/nginx/your_domain.crt;
  ssl_certificate_key /etc/nginx/your_domain.key;

  # 其他 HTTPS 配置...
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 1h;

  location / {
    # 这里将443端口代理到3000端口,因为我的应用程序在3000上
    proxy_pass http://localhost:3000;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    
    proxy_connect_timeout 30s;
    proxy_send_timeout 30s;
    proxy_read_timeout 30s;
  }
}

其中:

  1. ssl_certificate 配置项指定了证书文件的路径。
  2. ssl_certificate_key 配置项指定了私钥文件的路径。
  3. ssl_protocols 配置项指定了服务器在与客户端建立 SSL/TLS 连接时,允许使用哪些 SSL/TLS 协议版本。
    TLSv1.0 和 TLSv1.1 也已被现代安全标准(如 PCI DSS)弃用,因为它们存在弱点。
    TLSv1.3 是最新、最安全、性能也最好的协议,它加密了更多的握手过程,并且连接速度更快。
  4. ssl_ciphers 配置项指定了支持的加密套件。
  5. ssl_prefer_server_ciphers 配置项指定了在 SSL/TLS 握手时,是使用客户端的密码套件偏好顺序,还是使用服务器的。
    on 服务器端在 ssl_ciphers 指令中定义的顺序优先级更高。
    off 客户端提供的密码套件列表的顺序优先级更高。
  6. ssl_session_cache 配置项指定了 SSL/TLS 会话缓存,用于存储会话参数,以支持“会话恢复”,从而提升性能。
    shared: 表示在所有工作进程之间共享的缓存。
    SSL: 为这个缓存区域起的名字。
    10m: 为缓存分配 10MB 的内存空间。1MB 大约可以存储 4000 个会话。
  7. ssl_session_timeout 配置项指定了 SSL/TLS 会话缓存的有效时间。即一个会话 ID 在缓存中存储多久之后会被清除。
    5m(5分钟)是一个比较保守和安全的设置。
    1h(1小时)是很多现代配置的常用值,能在安全和性能之间取得良好平衡。

Http 重定向到 Https

将下面的配置粘贴到配置文件中

# 配置 HTTP 服务器
server {
  listen 80;
  server_name your_domain.com www.your_domain.com;

  # 重定向到 HTTPS
  return 301 https://$host$request_uri;
}

配置完成之后 按下 Esc 退出编辑,输入 :wq 保存并退出。

重启 Nginx 服务器。

systemctl reload nginx
目录
  • 上传 SSL 证书
  • 配置 Nginx 服务器证书
  • Http 重定向到 Https