NGINX - 主机 2 HTTPS 节点应用程序

NGINX - Host 2 HTTPS Node apps

我是 Nginx 的新手,在我的 RaspberryPi (Raspbian) 上托管 2 个网站时遇到了一些问题。

我有 2 个域,site1.com (:8080) 和 site2.com(:8000),都是 Node.JS 应用程序(使用 Express)。我已经通过 Let's Encrypt 为两者进行了 SSL 认证。

这是我的 site1 nginx 配置 (/etc/nginx/site-available/site1):

server {
    server_name site2.com;
        listen 80;
        listen [::]:80;
    location / {
        include /etc/nginx/proxy_params;
        proxy_pass http://192.168.1.11:8080;
    }
}

这是我的 site2 nginx 配置 (/etc/nginx/site-available/site2):

server {
    server_name site1.com;
        listen 80;
        listen [::]:80;
    location / {
        include /etc/nginx/proxy_params;
        proxy_pass http://192.168.1.11:8000;
    }
}

所以在这些 conf 文件中确实没有 443 的部分,但 https://site2.com is working well but https://site1.com redirect me to the webpage of https://site2.com(保留 site1 URL)。我想这是因为 my_server_ip:443 已经被 site2 占用了(不是 ??)。

http://site2.com 给我一个 502 Bad Gateway 并且没有重定向到 https(site1 很好地重定向到他的 https)。

这是我的 Node 应用程序的服务器部分,它们对于 2 个应用程序是相同的(端口和 SSL URI 除外)

const express = require('express')
const app = express()
var https = require('https');
var http = require('http');
var fs = require('fs');

const privateKey = fs.readFileSync('/etc/letsencrypt/live/site1or2.com/privkey.pem', 'utf8');
const certificate = fs.readFileSync('/etc/letsencrypt/live/site1or2.com/cert.pem', 'utf8');
const ca = fs.readFileSync('/etc/letsencrypt/live/site1or2.com/chain.pem', 'utf8');

const credentials = {
    key: privateKey,
    cert: certificate,
    ca: ca
};
const httpsServer = https.createServer(credentials, app);

const bodyParser = require("body-parser");
const urlencodedParser = app.use(bodyParser.urlencoded({
    extended: true
}));

http.createServer(function (req, res) {
    //redirect to https
    res.writeHead(301, { "Location": "https://" + req.headers['host'] + req.url });
    res.end();
}).listen(8080); //8000 for my site2.com

httpsServer.listen('443', () => {
    console.log('Server https listening on Port 443');
})

我试图更改 Nginx confs 以添加 'listen 443; SSL on;...',但我总是遇到 'Failed to start A high-performance web server and a reverse proxy server' 之类的错误,我不知道如何修复它。 那么问题是来自我的 JS 代码还是我的 Nginx confs? (或者两者都可能......?)

感谢阅读,这是我的第一个 Whosebug post,希望我没有忘记信息,如果有英文错误,请见谅。

祝你晚上(或一天)愉快!

我终于明白了使用 SSL 托管的多节点网站是如何工作的,在 node.JS 配置 (app.js) 中,应用程序必须只监听 1 个端口(对我来说是 8080 和 8000)并且根本不能引用 SSL 和端口 443。 所有的 ssl 配置和 https 重定向都必须在 Nginx conf 中,例如,我的文件 /etc/nginx/sites-available/site1:

server {
    server_name site1.com;
        listen 80;
        listen [::]:80;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl;
        ssl_certificate /etc/letsencrypt/live/site1.com/cert.pem;
        ssl_certificate_key /etc/letsencrypt/live/site1.com/privkey.pem;
        server_name site1.com;

    location / {
        proxy_pass http://192.168.1.11:8080;
        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;
    }
}

对于端口 8000 的站点 2 也是如此。