站内搜索

Nginx 服务器安装及配置SSL证书全过程记录

  很长时间没操作怕忘记,在此做个笔记。下次要操作的时候,可以直接翻出来查阅。废话不多说,直接开始。

一、申请SSL证书

申请途径有很多,免费收费的都有,这里不多介绍了,不是本文重点。之前阿里云有免费一年的SSL证书,现在好像转为免费2个月了。 申请成功后你会得到以下两个文件。
证书文件(.PEM格式):Nginx支持安装PEM格式的文件,PEM格式的证书文件是采用Base64编码的文本文件,且包含完整证书链。解压后,该文件以证书ID_证书绑定域名命名。
私钥文件(.KEY格式):默认以证书绑定域名命名。

二、上传证书文件

1. 执行以下命令,在Nginx的conf目录下创建一个用于存放证书的目录。

cd /usr/local/nginx/conf  #进入Nginx默认配置文件目录。该目录为手动编译安装Nginx时的默认目录,如果您修改过默认安装目录或使用其他方式安装,请根据实际配置调整。
mkdir cert  #创建证书目录,命名为cert。

2. 将证书文件和私钥文件上传到Nginx服务器的证书目录(/usr/local/nginx/conf/cert)。如何上传?可以使用远程登录工具附带的本地文件上传功能,上传文件。例如PuTTy、Xshell或WinSCP等。

三、安装配置证书

1. 编辑Nginx配置文件nginx.conf,修改与证书相关的配置

这里必须说一下,nginx.conf默认保存在/usr/local/nginx/conf目录下。如果您修改过nginx.conf的位置,可以执行nginx -t,查看nginx的配置文件路径,并将/usr/local/nginx/conf/nginx.conf进行替换。

确定文件位置之后,执行以下命令打开配置文件:
vim /usr/local/nginx/conf/nginx.conf

2. 在nginx.conf中定位到server属性配置

参考如下示例进行修改:

server {
     #HTTPS的默认访问端口443。
     #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
     listen 443 ssl;
     
     #填写证书绑定的域名
     server_name ;
 
     #填写证书文件绝对路径
     ssl_certificate cert/.pem;
     #填写证书私钥文件绝对路径
     ssl_certificate_key cert/.key;
 
     ssl_session_cache shared:SSL:1m;
     ssl_session_timeout 5m;
	 
     #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
     #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
     ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

     #表示优先使用服务端加密套件。默认开启
     ssl_prefer_server_ciphers on;
 
 
    location / {
           root html;
           index index.html index.htm;
    }
}

3. 设置HTTP请求自动跳转HTTPS

如果您希望所有的HTTP访问自动跳转到HTTPS页面,可通过rewrite指令重定向到HTTPS。

以下代码片段需要放置在nginx.conf文件中server {}代码段后面,即设置HTTP请求自动跳转HTTPS后,nginx.conf文件中会存在两个server {}代码段。

server {
    listen 80;
    #填写证书绑定的域名
    server_name ;
    #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    rewrite ^(.*)$ https://$host$1;
    location / {
        index index.html index.htm;
    }
}

4. 重启Nginx服务

cd /usr/local/nginx/sbin  #进入Nginx服务的可执行目录。
./nginx -s reload  #重新载入配置文件。

四、问题报错

报错the “ssl” parameter requires ngx_http_ssl_module:您需要重新编译Nginx并在编译安装的时候加上–with-http_ssl_module配置。

报错”/cert/3970497_demo.aliyundoc.com.pem”:BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/cert/3970497_demo.aliyundoc.com.pem’,’r’) error:2006D080:BIO routines:BIO_new_file:no such file):您需要去掉证书相对路径最前面的/。例如,您需要去掉/cert/cert-file-name.pem最前面的/,使用正确的相对路径cert/cert-file-name.pem。

Copyright © XiakeShu.com 版权所有 | 备案号:浙ICP备11004787号-12