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

相关推荐
研究司马懿10 小时前
【云原生】Gateway API高级功能
云原生·go·gateway·k8s·gateway api
梦想很大很大1 天前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go
lekami_兰1 天前
MySQL 长事务:藏在业务里的性能 “隐形杀手”
数据库·mysql·go·长事务
却尘1 天前
一篇小白也能看懂的 Go 字符串拼接 & Builder & cap 全家桶
后端·go
ん贤1 天前
一次批量删除引发的死锁,最终我选择不加锁
数据库·安全·go·死锁
mtngt112 天前
AI DDD重构实践
go
Grassto3 天前
12 go.sum 是如何保证依赖安全的?校验机制源码解析
安全·golang·go·哈希算法·go module
Grassto5 天前
11 Go Module 缓存机制详解
开发语言·缓存·golang·go·go module
程序设计实验室6 天前
2025年的最后一天,分享我使用go语言开发的电子书转换工具网站
go
我的golang之路果然有问题6 天前
使用 Hugo + GitHub Pages + PaperMod 主题 + Obsidian 搭建开发博客
golang·go·github·博客·个人开发·个人博客·hugo