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

相关推荐
煎鱼eddycjy8 小时前
新提案:由迭代器启发的 Go 错误函数处理
go
煎鱼eddycjy8 小时前
Go 语言十五周年!权力交接、回顾与展望
go
不爱说话郭德纲1 天前
聚焦 Go 语言框架,探索创新实践过程
go·编程语言
0x派大星2 天前
【Golang】——Gin 框架中的 API 请求处理与 JSON 数据绑定
开发语言·后端·golang·go·json·gin
IT书架2 天前
golang高频面试真题
面试·go
郝同学的测开笔记2 天前
云原生探索系列(十四):Go 语言panic、defer以及recover函数
后端·云原生·go
秋落风声3 天前
【滑动窗口入门篇】
java·算法·leetcode·go·哈希表
0x派大星5 天前
【Golang】——Gin 框架中的模板渲染详解
开发语言·后端·golang·go·gin
0x派大星5 天前
【Golang】——Gin 框架中的表单处理与数据绑定
开发语言·后端·golang·go·gin
三里清风_6 天前
如何使用Casbin设计后台权限管理系统
golang·go·casbin