一、背景

      由于最近在做小程序,小程序所有的后台请求都要求是https格式的域名,因此,我这里也不得不新配置一个https域名。其中遇到一些坑,也学到不少东西,记录一下。

首先博主用的是阿里云的服务器,使用阿里提供的Symantec免费版 SSL。

二、阿里方面的步骤

1、首先是去阿里的域名管理那边解析出新域名

2、然后去阿里云盾那边,把阿里免费给的SSL证书绑定到域名上。(阿里只会给出一个免费的证书,如果要配置多个https域名的话,就要花钱买了,听说很贵。。)

nginx 解析upstream 指定多个DNS nginx如何配置dns解析_nginx

如图,我们要先按步骤进行申请。申请成功之后就可以下载证书了。申请的过程中可能会出现DNS解析错误,我们只需要按照阿里给出的方法解决即可。(我这里选择的是阿里帮我们生成CSR证书)

3、下载证书,解压之后,我们能看到 .key和.pem文件。

三、服务器方面的步骤

1、首先,我们根据阿里给出的教程,我们需要把下载的.key和.pem文件上传到服务器上。先找到nginx的安装目录。

这里注意下,我本来是通过:

ps  -ef | grep nginx

返回结果包含安装目录
root      2662     1  0 07:12 ?        00:00:00 nginx: master process /usr/sbin/nginx

      但是在后面才发现,这个只是nginx程序所在的位置,我们要找的是nginx配置文件所在的目录。在我这里是:/etc/nginx

2、在nginx目录下新建cert目录,把证书拷贝进去

1、创建cert
mkdir cert;
2、通过ftp把证书文件传上去
3、赋予权限
chmod 777 -R cert;

3、修改nginx的配置,这里注意下,https用的是443端口,而不是咱们http的80端口:

server {
        listen 443;
        server_name aaa.bbb.com(你的域名);
        root 你的项目目录;
        index index.php index.html;
    ssl on;
     ssl_certificate   cert/214482258820159.pem;
     ssl_certificate_key  cert/214482258820159.key;
     ssl_session_timeout 5m;
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_prefer_server_ciphers on;
    ...

4、修改完成之后,重启nginx即可。重启之后,我们通过https://xxxx.com即可访问自己的项目。

四、碰到的问题:

1、配置完成之后,重启nginx报错:

nginx.serviceJob for nginx.service failed. See 'systemctl status nginx.service' and 'journalctl -xn' for details.

又是这种错误。。大家可以参考下这个博客:

2、我这里出现这个错误,并不是因为端口被占用的问题,我们按照提示,输入

systemctl status nginx.service -l

结果:
an 31 10:50:59 online systemd[1]: Starting A high performance web server and a rev......
Jan 31 10:50:59 online nginx[30556]: nginx: [emerg] BIO_new_file("/etc/nginx/cert/2...le)
Jan 31 10:50:59 online nginx[30556]: nginx: configuration file /etc/nginx/nginx.con...led
Jan 31 10:50:59 online systemd[1]: nginx.service: control process exited, code=exit...s=1
Jan 31 10:50:59 online systemd[1]: Failed to start A high performance web server an...er.
Jan 31 10:50:59 online systemd[1]: Unit nginx.service entered failed state.
Hint: Some lines were ellipsized, use -l to show in full.

我根据错误提示发现,这里之所以出错是因为证书文件的原因。系统找不到也打不开cert里面的文件。所以这里记得:
1)cert要在/etc/nginx目录下
2)记得给777权限

3、nignx重启成功之后,还是无法访问

这里问题,我以前碰到过。是nginx通过公网IP无法访问的问题,大家可以参考下我的这篇博客:

答案:我这里也是因为阿里安全组规则没有配置443端口的原因。我新增了一条安全组规则就可以了。

end