nginx配置https域名详解

一、背景

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

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

二、阿里方面的步骤

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

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

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

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

三、服务器方面的步骤

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

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

yaml 复制代码
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目录,把证书拷贝进去

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

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

ini 复制代码
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即可。重启之后,我们通过xxxx.com即可访问自己的项目。

四、碰到的问题:

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

rust 复制代码
nginx.serviceJob for nginx.service failed. See 'systemctl status nginx.service' and 'journalctl -xn' for details.

又是这种错误。。大家可以参考下这个博客:
blog.csdn.net/ljfphp/arti...

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

less 复制代码
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无法访问的问题,大家可以参考下我的这篇博客:
blog.csdn.net/ljfphp/arti...

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

end

相关推荐
桃园码工16 小时前
1-Gin介绍与环境搭建 --[Gin 框架入门精讲与实战案例]
go·gin·环境搭建
云中谷17 小时前
Golang 神器!go-decorator 一行注释搞定装饰器,v0.22版本发布
go·敏捷开发
苏三有春1 天前
五分钟学会如何在GitHub上自动化部署个人博客(hugo框架 + stack主题)
git·go·github
我是前端小学生2 天前
Go语言中的方法和函数
go
探索云原生2 天前
在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析
ai·云原生·kubernetes·go·gpu
自在的LEE2 天前
当 Go 遇上 Windows:15.625ms 的时间更新困局
后端·kubernetes·go
Gvto3 天前
使用FakeSMTP创建本地SMTP服务器接收邮件具体实现。
go·smtp·mailtrap
白泽来了3 天前
【Go进阶】手写 Go websocket 库(一)|WebSocket 通信协议
开源·go
witton4 天前
将VSCode配置成Goland的视觉效果
ide·vscode·编辑器·go·字体·c/c++·goland
非凡的世界4 天前
5个用于构建Web应用程序的Go Web框架
golang·go·框架·web