7x24小时服务热线

400-688-5856
400
400-688-5856

7*24小时服务热线

400-688-5856

QQ在线咨询

咨询

微信客服

公众号
扫码关注海域云公众号 随时查看进度/优惠/通知

Nginx服务器怎么配置SSL证书?Nginx安装SSL证书的方法

2026-03-09

在开始配置 SSL 证书之前,我们需要做好一些准备工作,确保后续的配置过程能够顺利进行。

1.Nginx安装及SSL模块情况

查看nginx安装版本与模块,有with-http_ssl_module即可,否则需要重新安装with-http_ssl_module模块。

[root@centos nginx]# ./nginx/sbin/nginx -V
nginx version: nginx/1.20.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
[root@centos nginx]# 

2.获取 SSL 证书

获取 SSL 证书主要有两种常见途径,一种是购买商业证书,另一种是使用免费的证书,我们可以根据自己的实际需求来选择。

  • 购买商业证书:像 sectigo、globalsign、DigiCert 等,都是知名的证书颁发机构(CA),它们提供不同类型和级别的 SSL 证书,比如域名验证(DV)证书、组织验证(OV)证书和扩展验证(EV)证书。DV 证书验证过程比较简单,主要验证域名的所有权,适合个人博客或小型网站;OV 证书除了验证域名所有权,还会对申请组织的信息进行验证,安全性更高,适用于企业网站;EV 证书的验证最为严格,会对网站运营者的身份和企业信息进行全面审核,浏览器(主要是IE浏览器)地址栏会显示绿色的安全标识和企业名称,常用于金融、电商等对安全性要求极高的网站。购买商业证书的流程一般是先在 CA 机构的官方网站上选择合适的证书类型,然后按照提示提交证书签名请求(CSR),CSR 包含了网站的域名、组织信息等内容,CA 机构在验证通过后,就会颁发证书。或者直接找海域云这种证书代理商直接采购。不同 CA 机构的验证时间和价格有所不同,一般 DV 证书的价格在几十元到几百元每年,OV 和 EV 证书则会更贵一些 。

  • 使用免费证书:目前主流的是Let's Encrypt,非常适合个人博主和小型网站使用。在 CentOS 系统上获取 Let's Encrypt 证书,可以先安装 Certbot 工具,Certbot 是 Let's Encrypt 官方推荐的客户端,使用它能够方便地申请和管理证书。Let's Encrypt证书有效期为90天,需要设置自动续期。整体而言需要一定的动手能力。

  • 使用OpenSSL生成自定义证书,一般用于局域网或者测试使用。

申请SSL证书后,下载Nginx版本的证书(根据服务器类型有Apache/Nginx/IIS/Tomcat等类型证书);

配置 SSL 证书详细步骤

在做好充分的准备工作后,接下来就可以开始在 Nginx 服务器上配置 SSL 证书了,下面我将为大家详细介绍具体的配置步骤。

需要将获取到的 SSL 证书文件和私钥上传至服务器的指定目录。一般来说,我们可以选择在 Nginx的安装目录下创建一个专门存放证书的文件夹,如 “/usr/local/nginx/ssl/” 。

假设你已经购买了商业证书或者通过 Let's Encrypt 获取到了证书,以海域云seapx网站为例,证书文件名为 “seapx.com.pem”或者“seapx.com.crt”,文件后缀可能不同,私钥文件名为 “seapx.com.key” ,可以使用 Secure FTP(SFTP)工具或者通过 SSH 连接到服务器;

上传完成后,为了保证证书文件和私钥的安全性,需要设置合适的文件权限,只允许文件所有者读取和写入:

sudo chmod 600 /usr/local/nginx/ssl/seapx.com.pem
sudo chmod 600 /usr/local/nginx/ssl/seapx.com.key

上传好证书文件后,就需要编辑 Nginx 的配置文件,在其中添加 SSL 相关的配置。

在配置文件中找到对应的 server 块(如果是为多个域名配置 SSL 证书,可能需要针对每个域名的 server 块进行配置),在 server 块中添加以下 SSL 相关配置:

1.修改nginx.conf

server {
    listen 80; # 监听HTTP的80端口
  server_name seapx.com # 指定服务器域名
    # 使用301永久重定向,将所有HTTP请求重定向到HTTPS
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl; # 监听443端口并启用SSL
  server_name seapx.com; # 指定服务器域名,多个域名用空格隔开

  ssl_certificate /usr/local/nginx/ssl/seapx.com.pem; # 指定证书文件路径
  ssl_certificate_key /usr/local/nginx/ssl/seapx.com.key; # 指定私钥文件路径

    ssl_session_cache shared:SSL:10m; # 配置SSL会话缓存,提高性能
    ssl_session_timeout 10m;
    ssl_buffer_size 8k ;

    # 指定使用的SSL/TLS协议版本,兼容老版本的浏览器
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    # 指定加密套件,选择安全且兼容的加密算法
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES25;
    # 优先使用服务器端的加密套件
    ssl_prefer_server_ciphers on;

    # HSTS(强制HTTPS)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    # 防止点击劫持
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;

    location / {
        root /var/www/html; # 网站根目录
        index index.html index.htm; # 默认索引文件
    }
}

上述配置中,

listen 443 ssl表示 Nginx 监听 443 端口,并启用 SSL 加密;

server_name指定了服务器的域名;

ssl_certificatessl_certificate_key分别指定了证书文件和私钥文件的路径;

ssl_session_cachessl_session_timeout用于配置 SSL 会话缓存,提高性能;

ssl_protocols指定了允许使用的 SSL/TLS 协议版本;

ssl_ciphers指定了加密套件;

ssl_prefer_server_ciphers on表示优先使用服务器端定义的加密套件 。

2.配置参数详解

为了让大家更好地理解上述配置中的各个参数,下面对一些关键的 SSL 配置参数进行详细解释:

  • ssl_protocols:该参数用于指定 Nginx 服务器支持的 SSL/TLS 协议版本。随着网络安全技术的发展,一些旧版本的协议被发现存在安全漏洞,比如 SSLv3 版本存在 POODLE 漏洞,TLSv1.0 和 TLSv1.1 版本也逐渐被认为不够安全。因此,建议只启用较新且安全的版本,如 TLSv1.2 和 TLSv1.3 。TLSv1.3 是目前最新的版本,它在安全性和性能上都有很大的提升,比如握手过程更快,加密算法更安全 。

  • ssl_ciphers:这个参数用于指定服务器支持的加密套件。加密套件是由加密算法、密钥交换算法、消息认证码算法等组成的集合,不同的加密套件提供不同级别的安全性和性能 。在选择加密套件时,应优先选择安全且兼容的算法,比如上述配置中的 “ECDHE - RSA - AES256 - GCM - SHA512:DHE - RSA - AES256 - GCM - SHA512” ,其中 ECDHE 和 DHE 是密钥交换算法,用于在客户端和服务器之间安全地交换密钥;AES256 - GCM 是加密算法,提供高强度的加密;SHA512 是消息认证码算法,用于验证数据的完整性 。避免使用已知存在安全风险的加密套件,如包含 MD5、RC4 等算法的套件 。

  • ssl_prefer_server_ciphers:当设置为 “on” 时,Nginx 会优先使用服务器端定义的加密套件列表,而不是客户端偏好的加密套件 。这有助于确保服务器使用更安全的加密算法,防止客户端选择弱加密算法,从而抵御中间人攻击和协议降级漏洞 。例如,如果客户端支持一些旧的、不安全的加密套件,而服务器设置了ssl_prefer_server_ciphers on,服务器会优先选择自己配置的安全加密套件与客户端进行通信 。

  • ssl_session_cachessl_session_timeoutssl_session_cache用于配置 SSL 会话缓存,它可以存储 SSL 会话的相关信息,如会话 ID、密钥等 。当同一个客户端再次连接到服务器时,如果会话缓存中存在有效的会话信息,就可以避免重新进行完整的 SSL 握手过程,从而提高性能,减少 CPU 开销 。shared:SSL:10m表示创建一个共享的 SSL 会话缓存,大小为 10MB 。ssl_session_timeout则指定了会话缓存中会话的超时时间,这里设置为 10 分钟,即如果一个会话在 10 分钟内没有被使用,就会从缓存中移除 。

3.重定向 HTTP 到 HTTPS

完成上述配置后,网站已经可以通过 HTTPS 协议访问了。为了确保所有的 HTTP 请求都能自动重定向到 HTTPS,以提高网站的安全性,可以在 Nginx 配置文件中添加 HTTP 重定向规则 。在同一个 Nginx 配置文件中,添加如下 server 块:

server {
    listen 80; # 监听HTTP的80端口
  server_name seapx.com # 指定服务器域名
    # 使用301永久重定向,将所有HTTP请求重定向到HTTPS
    return 301 https://$host$request_uri;
}

上述配置中,

listen 80表示监听 HTTP 的 80 端口;

server_name指定了域名;

return 301 https://$host$request_uri;表示将所有 HTTP 请求通过 301 永久重定向到对应的 HTTPS 地址 。其中,$host变量表示请求的主机名,$request_uri表示请求的 URI 。

这样,当用户访问 “http://seapx.com” 时,Nginx 会自动将其重定向到 “https://seapx.com” 。

4.重启 Nginx 服务

在重启 Nginx 服务之前,务必先检查 Nginx 配置文件的语法是否正确,以免因为语法错误导致 Nginx 服务无法正常启动。可以使用以下命令来检查 Nginx 配置文件的语法:

[root@centos nginx]# ./sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@centos nginx]# 

执行上述命令后,如果输出结果显示 “syntax is ok” 和 “test is successful”,那就说明 Nginx 配置文件的语法没有问题,可以继续下一步操作;要是出现了错误提示,就需要仔细检查配置文件,找到并修正错误。比如,如果在配置文件中不小心拼错了指令或者少写了分号,都可能导致语法错误 。此时,需要根据错误提示信息,使用文本编辑器重新打开配置文件进行修改,修改完成后再次使用 “nginx -t” 命令进行检查,直到语法检查通过为止。

在确认 Nginx 配置文件语法正确后,就可以重启 Nginx 服务或者重新加载配置文件,配置即可生效。

# 重启nginx 服务会中断
sudo systemctl restart nginx
sudo service nginx restart

另外,如果你希望 Nginx 在不中断现有连接的情况下重新加载配置,还可以使用以下命令进行平滑重启:

sudo /usr/local/nginx/sbin/nginx -s reload

平滑重启会向 Nginx 主进程发送信号,通知它重新读取配置文件,并使用新的配置启动新的工作进程,同时逐步关闭旧的工作进程,这样可以最大限度地减少对正在进行的客户端请求的影响,特别适用于生产环境 。