Letsencrypt SSL 在节点上和 rails 应用程序在同一个 DigitalOcean 液滴上。适用于 rails 但不适用于节点

Letsencrypt SSL on node and rails app on same DigitalOcean droplet. Works for rails but not for node

我有两个应用程序,一个是 rails 应用程序,它使用 Let's encrypt for SSL 和 nginx 作为服务器。它部署在数字海洋上。 我还添加了一个使用 Express 构建的简单节点应用程序(对我的 rails 应用程序来说是一个补充功能),它侦听端口 8080。

我希望我的节点应用程序使用与我的 rails 应用程序相同的 SSL 证书。 我如何通过使用 nginx 配置它来做到这一点?还是有更好的方法来实现?

这是我的 nginx 配置文件。

server {
                listen 443 ssl;
            server_name mydomain.com www.mydomain.com;

        ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

        passenger_enabled on;
        rails_env    production;
        root         /home/deploy/mydomain/current/public;

        # redirect server error pages to the static page /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

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

您需要生成 2 个证书,每个应用一个,指定不同的端口或子域。然后你需要 2 个不同的 nginx conf

server {
    listen 443 ssl;
    server_name abc.xyz www.abc.xyz;
    ssl_certificate /etc/letsencrypt/live/abc.xyz/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/abc.xyz/privkey.pem;
    location / {
        root  /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page  500 502 503 504  /50x.html;
    location = /50x.html {
        root  /usr/share/nginx/html;
    }
}


server {
    listen 443 ssl;
    server_name api.abc.xyz;
    ssl_certificate /etc/letsencrypt/live/api.abc.xyz/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.abc.xyz/privkey.pem;
    location / {
        proxy_pass http://localhost:3000/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}