NGINX - Хост 2 приложений узла HTTPS - PullRequest
0 голосов
/ 10 июля 2020

Я новичок в Nginx, и у меня возникли проблемы с размещением 2 веб-сайтов на моем RaspberryPi (Raspbian).

У меня 2 домена: site1.com (: 8080) и site2.com (: 8000), оба являются Node.JS приложениями (с Express). У меня есть сертификаты SSL с Let's Encrypt для обоих.

Это мой сайт1 nginx config (/ 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 config (/ 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 есть работает хорошо, но https://site1.com перенаправляет меня на веб-страницу https://site2.com (сохраняя URL-адрес site1). Я предполагаю, это потому, что my_server_ip: 443 уже занят site2 (нет ??).

И http://site2.com дает мне 502 Bad Gateway и не перенаправляется на https (site1 - это хорошо перенаправлен на его https).

Это серверная часть моих приложений Node, они одинаковы для двух приложений (кроме порта и 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 включен; ... », но у меня всегда возникают такие ошибки, как« Не удалось запустить высокопроизводительный веб-сервер и обратный прокси-сервер », и я не понимаю, как это исправить. Так проблема в моем коде JS или в моих Nginx confs? (или оба, может быть ..?)

Спасибо, что прочитали, это мой первый пост на StackOverflow, надеюсь, я не забыл информацию и извините, если есть ошибка sh на английском языке.

Доброго вечера (или дня)!

1 Ответ

0 голосов
/ 13 июля 2020

Я наконец понял, как работает хостинг сайтов с несколькими узлами с SSL, в конфигурации node.JS (приложение 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;
    }
}

И то же самое для site2 с портом 8000 .

...