腾讯云| Nginx安装与配置HTTPS

最近在写项目的时候,在将后台服务器部署到腾讯云后,因为前端是小程序,微信小程序开发对于正常使用必须基于HTTPS请求,因此需要配置HTTPS
本来是使用比较简单openssl进行配置使用,使用第三方免费的SSL证书,但是由于自己配置的证书不稳定,不能被校验通过,服务功能不能正常使用。因此选择申请腾讯云服务器的SSL证书使用,后台的服务器框架为Flask,但是腾讯云里面免费的SSL证书只有ApacheIISNginxTomcat四种,相应的证书对应专属的服务器,因此选择使用配置Nginx服务器,再将相关请求代理到后端服务器处理

环境系统

  • Centos 7

安装

1
yum install nginx

安装之后,可以查看nginx的默认安装目录

1
2
3
4
# 方法 1
nginx -t
# 方法 2
whereis nginx

1

设置启动

1
2
3
4
5
# 设置自动启动
systemctl enable nginx

# 启动nginx
systemctl start nginx

获取证书

  • 腾讯云 -> 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
    38
    server {
    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;