【问题标题】:SSL Certificate on webapp (vue with nginx, nodejs with pm2)webapp 上的 SSL 证书(vue 与 nginx,nodejs 与 pm2)
【发布时间】:2021-05-21 03:50:49
【问题描述】:

首先 - 我对这些东西真的很陌生。我想为我正在开发的 webapp 获取 ssl 证书。我期待任何建议。 使用 Ubuntu 20.04

结构如下:

  • 我正在使用 Nginx 在端口 80 上提供我的前端,以侦听我指定的 server_name(服务器的域名)。

  • node.js 后端使用 pm2 在服务器 IP 地址的 60702 端口上运行。

我的尝试:

我尝试从letsencrypt获取证书并为我的前端做好准备,就像这里描述的digitalocean

server{
        # SSL configuration
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;

        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
        add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';

        # Path to certificates and configuration
        include snippets/self-signed.conf;
        include snippets/ssl-params.conf;
        ...

在 vue 配置中,我将 https 设置为 true:

module.exports = {
  baseUrl: './',
  devServer: {
    port: 8080,
    https: true,
    disableHostCheck: true
  }
};

问题出在我的后端。我试过了:

https.createServer({
     key: fs.readFileSync('certs/selfsigned.key', 'utf8'),
     cert: fs.readFileSync('certs/selfsigned.crt', 'utf8'),
    //key: fs.readFileSync('certs/key.pem', 'utf8'),
    //cert: fs.readFileSync('certs/cert.pem', 'utf8'),
    rejectUnauthorized: false
  }, app)
  .listen(nconf.get('port'), function() {
    console.log(`App listening on port ${nconf.get('port')}! Go to https://MY_IP:${nconf.get('port')}/`)
  });

但我在这里读到:letsencrypt on IP addresses,letsencrypt 不提供 IP 地址证书。

那么我怎样才能为我的申请获得证书呢? 我该怎么做呢?

我需要将证书链接到前端和后端吗?

【问题讨论】:

    标签: node.js vue.js nginx ssl


    【解决方案1】:

    根据我目前对 nginx 的有限经验,您需要在 nginx 默认值中添加以下行:

        ssl on;
        server_name your.domain.com;
        ssl_certificate /domain1/ssl-bundle.crt;
        ssl_certificate_key /domain1/server.key;
    

    此外,默认情况下,您需要为您的 nodejs 服务器添加位置详细信息:

    location / {
        proxy_pass http://yourip:port/route;
    }
    

    最后,我没有在我的 nodejs 中使用证书,它是一个 HTTP 证书,而是让 nginx 处理这些。 bundle.crt 包含 rootca 和公共证书,因为它在上面的示例中是自签名的。

    【讨论】:

    • 好的,这对开始有很大帮助,谢谢!你能解释一下代理通行证吗?使用kmy内部api结构不用编辑?
    • 那将是您的域或您的 IP:60702。另外,请注意,由于 nginx for https 将默认在 443 而不是 80 侦听。
    • 是的,在我的示例中我也使用了端口 443。代理通行证时的/route 是什么?
    • 我的意思是如果你想在端口之后指向一个特定的文件夹,如果不是,忽略它
    • 好吧,所以我不必在那里指定我的后端 api?这很好。
    猜你喜欢
    • 2016-06-26
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2021-09-24
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多