一、背景
由于最近在做小程序,小程序所有的后台请求都要求是https格式的域名,因此,我这里也不得不新配置一个https域名。其中遇到一些坑,也学到不少东西,记录一下。
首先博主用的是阿里云的服务器,使用阿里提供的Symantec免费版 SSL。
二、阿里方面的步骤
1、首先是去阿里的域名管理那边解析出新域名
2、然后去阿里云盾那边,把阿里免费给的SSL证书绑定到域名上。(阿里只会给出一个免费的证书,如果要配置多个https域名的话,就要花钱买了,听说很贵。。)
如图,我们要先按步骤进行申请。申请成功之后就可以下载证书了。申请的过程中可能会出现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