Как перенаправить http на https в узле JS - PullRequest
0 голосов
/ 06 ноября 2019

Я развертываю js-сервер узла, используя

npm run start 

, и он работает нормально. Теперь я хотел добавить закрытый ключ ssl, поэтому я добавил ниже https_server.js файл:

 var https = require('https');
    var fs = require('fs');
    var https_options = {
    key: fs.readFileSync("/home/user/org.key"),
   cert: fs.readFileSync('/home/user/cert.pem')
    };
    https.createServer(https_options , function (req, res) {
    res.writeHead(200);
    res.end("Welcome to Node.js HTTPS Servern");
    }).listen(3000,'0.0.0.0')

И затем я запускаю

 node https_server.js

Так что, когда я запускаю это, вместо домашней страницы веб-приложения отображается «Добро пожаловать в Node.js HTTPS Servern». Должен ли я изменить эту часть

res.end("Welcome to Node.js HTTPS Servern");

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ

Я пытался также

var fs = require('fs');
var net = require('net');
var http = require('http');
var https = require('https');

var baseAddress = 3000;
var redirectAddress = 3001;
var httpsAddress = 3002;
var httpsOptions = {
    key: fs.readFileSync('/home/user/org.key'),
    cert: fs.readFileSync('/home/user/cert.pem')
};

net.createServer(tcpConnection).listen(baseAddress);
http.createServer(httpConnection).listen(redirectAddress);
https.createServer(httpsOptions, httpsConnection).listen(httpsAddress);

function tcpConnection(conn) {
    conn.once('data', function (buf) {
        // A TLS handshake record starts with byte 22.
        var address = (buf[0] === 22) ? httpsAddress : redirectAddress;
        var proxy = net.createConnection(address, function () {
            proxy.write(buf);
            conn.pipe(proxy).pipe(conn);
        });
    });
}

function httpConnection(req, res) {
    var host = req.headers['host'];
    res.writeHead(301, { "Location": "https://" + host + req.url });
    res.end();
}

function httpsConnection(req, res) {
    res.writeHead(200, { 'Content-Length': '5' });
    res.end('HTTPS');
}

Но этот также указывает на «HTTPS», а не на домашнюю страницу приложения

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Вот как я развертываю приложение js для узла и внедряю.

-установка nginx на сервере -установка pm2 на сервере -запуск вашего js-сервера узла с использованием pm2. Например: localhost: 3000 -обновить конфигурацию nginx o перенаправить все http-запросы на https o переслать https-запросы на localhost: 3000 с использованием proxy_server

nginx configuration:

server {
        listen       80 default_server;
        listen [::]:80 default_server;
        server_name example.com;
        return 301 https://example.com$request_uri;
}
server {
        listen 443  ssl;
        listen [::]:443 ssl;
        server_name  example.com;
        ssl_certificate path_to_certificate;
        ssl_certificate_key path_to_private_key;


        root         /usr/share/nginx/html;

        location / {
            proxy_pass http://localhost:3000;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
            proxy_read_timeout 5m;
            proxy_connect_timeout 5m;
            proxy_redirect off;

        }
...

Пожалуйста, дайте мне знать, если выесть вопросы

0 голосов
/ 06 ноября 2019

Как сказал @Jikun, вы можете использовать nginx в качестве прокси. С помощью nginx вы можете настроить ваши ssl-сертификаты, получать все запросы на порт 80 и перенаправлять их на ваш сервер узлов или на страницы ошибок. Он позволяет вам централизовать все запросы и служить дополнительным слоем, чтобы избежать прямых запросов к вашему серверу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...