Nginx+Egg.js配置Https

费了一下午终于把这个事搞定了,记录一下,也给有需要的小伙伴。

作为一个侧重前端的全栈,内心是很乐意用Node做后端的,也为有Eggjs这样的国产项目感到振奋。然而在看文档的时候又常常感到心里堵。

Nginx

在配置Https之前,我们的Nginx配置文件大概是这样的:

# /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    
    server {
        listen       80;
        server_name  www.你的域名.com;

        location / {
            root   html;
            try_files $uri $uri/ @router; # 配置使用路由
            index  index.html index.htm;
        }
    }
}

关于证书的内容请另行搜索。假设你现在已经有了证书文件了,把它们放在服务器的某个文件夹中。然后来修改配置文件

# /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    # 这是新增的
    server {
        listen       443 ssl; # 这是新版本Nginx的写法,老的写法是listen 443; ssl on;

        server_name  www.你的域名.com;

        # 这是两个证书文件的路径,改成自己的
        ssl_certificate  /usr/local/nginx/cert/9139200_isincerely.com.pem;
        ssl_certificate_key /usr/local/nginx/cert/9139200_isincerely.com.key;

        # 这些照抄
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
        ssl_prefer_server_ciphers on;
        
        # 这是从原本listen 80的server剪切过来的
        location / {
            root   html;
            try_files $uri $uri/ @router; # 配置使用路由
            index  index.html index.htm;
        }

        # 这是新增的,为Egg写的
        location /api/ {
            proxy_pass http://127.0.0.1:7001/;
        }

    server {
        listen       80;
        server_name  www.你的域名.com;
        # 强制转到https
        return 301 https://$server_name$request_uri;
    }
}
    

这里要注意的就是这段

location /api/ {
    proxy_pass http://127.0.0.1:7001/;
}

一般的Nginx配置https教程里没有这一段,就导致无法正确请求到Egg的接口。

Egg

配置完前面的内容,再把前端的请求、后端的跨域配置改成https,这样你的页面应该可以用https打开但是会发现请求报错了。

原来还需要在Egg的配置文件里加这段代码

// egg/config/config.default.js
const path = require("path");
module.exports = appInfo => {
    ...
    config.cluster = {
        https: {
            key: path.join(__dirname,'../app/cert/证书.key'), // https 证书绝对目录
           cert: path.join(__dirname,'../app/cert/证书.pem') // https 证书绝对目录
        }
    };
    ...
}

我不知道这段代码在文档的哪个位置,反正在文档里搜https或者ssl,都没有找到有用的内容。

另外有帖子说需要在Egg配置文件里加上

exports.proxy = true;

我没有加也没报错。

最后就是记得把前后端的代码中所有的http都改成https。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值