nginx配置https服务

2018年10月18日Web前端、Web后端

看了自问自答的图灵机器人,想在微信的小程序上搭个能自我聊天,或者查询的小机器人,可是,微信只支持https,而图灵机器人提供的接口只支持http接口,所以只能在中间搭个中转的服务器咯。

一、准备

服务器的话,拿出我那台吃灰的ecs。服务器端的话,还是用我比较了解的node,再配上nginx反向代理。 既然要https,那么证书等这一步也是不能少的。阿里云上正好也有免费的证书提供下载。

首先到证书控制台,点击右上角的购买证书

品牌选择Symantec,保护类型选择一个证书,此时有出现了免费型DV SSL这个选项,选择并购买。

买完这个证书后,会回到证书控制台,对该证书进行补全处理。

等待十分钟左右,证书就好啦。

点击下载,进行证书,私钥公钥的下载。

选择nginx,点击下载。

下载解压后,我们得到两个文件,

文章后面的配置可以作为参考。 这样我们就准备好啦,开始配置nginx。

二、nginx配置

先上传key,在nginx安装目录下(/etc/nginx)下新建了一个cert的文件夹,再使用rz命令将这两个文件读到服务器上去(上传再解压一样)。

我的nginx一开始装好了,这儿就不再演示了。首先到根目录,修改配置文件。

cd /etc/nginx/sites-available/
vi default

修改server中的内容,

server {
    listen 80;
    listen 443;
    ssl on;

    server_name www.zhuyuntao.com;
    ssl_certificate /etc/nginx/cert/215067043560468.pem;
    ssl_certificate_key /etc/nginx/cert/215067043560468.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "";
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Nginx-Proxy true;
        proxy_pass http://127.0.0.1:3000;
    }
}

这样就好了,当然sslcertificate和sslcertificatekey不要填错反了,servername记得改成自己的域名,proxy_pass改成自己node程序的地址。

注:如果有问题的化,记得检查下80和443端口是否被其他程序占用了。

三、测试与修改

测试下,打开https://www.zhuyuntao.com/地址,可以正常打开,https就生效了。倘若我们使用http登录,发现出现了400报错,如下:

The plain HTTP request was sent to HTTPS port,大概的意思就是http请求被发送到了https端口了。

http与https共存

我们继续修改配置,将刚才第二行listen 443和第三行ssl on合并成(listen 80别丢了):

listen 443 ssl;

此时再测试时,http和https均可以访问。

强制https

我们只要将http请求跳转到https上就行了。继续在第一份的配置之上修改。 首先删除第一行的listen 80。

在文件最前方新增一个新的server,

server {
    listen 80;
    server_name www.zhuyuntao.com
    return 301 https://$server_name$request_uri;
}

保存后,service nginx restart,重启下nginx,http就能跳转到https上啦。

好了,下面开始玩我的小机器人啦。