最近在写项目的时候,在将后台服务器部署到腾讯云后,因为前端是小程序,微信小程序开发对于正常使用必须基于
HTTPS
请求,因此需要配置HTTPS
。
本来是使用比较简单openssl
进行配置使用,使用第三方免费的SSL证书
,但是由于自己配置的证书不稳定,不能被校验通过,服务功能不能正常使用。因此选择申请腾讯云服务器的SSL证书
使用,后台的服务器框架为Flask
,但是腾讯云里面免费的SSL证书
只有Apache
、IIS
、Nginx
、Tomcat
四种,相应的证书对应专属的服务器,因此选择使用配置Nginx
服务器,再将相关请求代理到后端服务器处理
环境系统
- Centos 7
安装
1 | yum install nginx |
安装之后,可以查看nginx
的默认安装目录1
2
3
4方法 1
nginx -t
方法 2
whereis nginx
设置启动
1 | 设置自动启动 |
获取证书
腾讯云
->SSL证书管理
->申请
- 下载证书,将对应的
nginx
服务器证书上传到腾讯云上- 在配置
nginx
需要用到,本文将证书放到/etc/nginx/SSL
文件夹
- 在配置
修改配置文件
cd /etc/nginx
vi nginx.conf
,修改相应部分1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38server {
listen 80;
server_name xxx.xxx.cn; # 对应的域名或者host
rewrite ^(.*)$ https://$host$1 permanent; # 默认强制使用https对http进行跳转
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
...
# HTTPS server
#
server {
listen 443 ssl;
server_name qcloud.captainp.cn;
ssl_certificate /etc/nginx/SSL/1_qcloud.captainp.cn_bundle.crt; # 指定对应的证书
ssl_certificate_key /etc/nginx/SSL/2_qcloud.captainp.cn.key; # 指定对应的私钥
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
# root html;
# index index.html index.html;
proxy_pass http://xxx.xxx.cn:5000/; # 将请求都代理到本机5000,Flask服务器监听的端口进行处理,可以根据需要修改该部分
}
}
重启Nginx
1 | service nginx restart |
问题补充与解决
在之前的成功配置后,某天在使用在服务器后,突然发现访问异常了,服务被拒绝,简单的重启服务器后,再次请求,发现服务器日志没有相关请求信息,猜想nginx的服务出现了问题
- 首先检查nginx的配置是否正确:
nginx -t -c /etc/nginx/nginx.conf
- 发现有以下报错:
nginx: [emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
查阅相关博客:
不要在/var/run目下创建新目录。centos7,创建
了/var/run/nginx/
目录存放nginx.pid
,每次重启后,/var/run目录下都会清空!解决方法:
$vi /etc/nginx/nginx.conf
- 修改相应部分
1
2#pid /var/run/nginx/nginx.pid;
pid /home/nginx/pid/nginx.pid;