javascript - for - HTTPS für Express und Nginx konfigurieren



node js nginx (2)

Ich versuche, meine ExpressJS-App für eine https-Verbindung zu konfigurieren. Der Express-Server wird mit localhost: 8080 und der sichere localhost: 8443 ausgeführt.

Hier ist der server.js-Code für https:

var app = express();

var https = require('https');

const options = {
    cert: fs.readFileSync('/etc/letsencrypt/live/fire.mydomain.me/fullchain.pem'),
    key: fs.readFileSync('/etc/letsencrypt/live/fire.mydomain.me/privkey.pem')
};

app.listen(8080, console.log("Server running"));
https.createServer(options, app).listen(8443, console.log("Secure server running on port 8443"));

Und hier ist meine Nginx-Konfiguration:

server {
    listen 80;
    listen [::]:80;
    server_name fire.mydomain.me;

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

server {
    listen 443;
    listen [::]:443;
    server_name fire.mydomain.me;
    location / {
        proxy_pass https://localhost:8443;
        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;
    }
}

Was ich getan habe :

  • Generieren eines SSL-Zertifikats mit dem Letsencrypt-Zertifikatstool für die Domain fire.mydomain.me.
  • Nginx konfigurieren.
  • Konfigurieren der Knoten-App server.js
  • Hinzufügen von TCP-Regeln für den 443-Port in Ufw.

Ich habe es versucht

  • Kommentieren Sie die Serverzeile not-ssl in server.js, um zu erzwingen, dass die Verbindungen die SSL-Konfiguration durchlaufen: Dies ist die Seite, wenn ich versuche, zu fire.mydomain.me:443 zu wechseln, aber nicht zu "https: // fire.mydomain". mir". In beiden Fällen kein SSL. Beim Versuch, https: // fire.mydomain.me aufzurufen, wird in Google Chrome die Meldung "Diese Website bietet keine sichere Verbindung" angezeigt.

  • Ich habe dieses Tutorial zuerst befolgt, um die Konfiguration meines SSL-Knotens festzulegen: https://medium.com/@yash.kulshrestha/using-lets-encrypt-with-express-e069c7abe625#.93jgjlgsc

https://src-bin.com


Answer #1

Dank der @ rsp-Lösung ist hier die funktionierende Nginx-Konfiguration:

server {
listen 80;
listen 443 ssl;

server_name fire.mydomain.me;

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

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

Answer #2

Sie müssen HTTPS nicht zwischen Ihrem Nginx-Reverseproxy und der Node-App verwenden, die auf demselben Host ausgeführt wird. Sie können HTTP-Anforderungen an Port 80 und HTTPS-Anforderungen an Port 443 an denselben Port in Ihrer Node-App weiterleiten - in diesem Fall 8080 - und müssen in diesem Fall keine TLS-Zertifikate konfigurieren.

Sie können Ihre server.js-Datei folgendermaßen ändern:

var app = express();

app.listen(8080, console.log("Server running"));

und verwenden Sie eine proxy_pass http://localhost:8080; Konfiguration mit dem proxy_pass http://localhost:8080; für HTTP an Port 80 und HTTPS an Port 443.

So wird es normalerweise gemacht. Das Verschlüsseln des Datenverkehrs auf der Loopback-Schnittstelle bietet keine zusätzliche Sicherheit, da Sie zum Aufspüren des Datenverkehrs Root-Zugriff auf die Box benötigen und die Zertifikate trotzdem lesen und den Datenverkehr entschlüsseln können. In Anbetracht der Tatsache, dass die meisten Posts auf https://nodejs.org/en/blog/vulnerability/ mit OpenSSL zusammenhängen, könnte man argumentieren, dass die Verwendung von SSL in Node die Sicherheit in diesem speziellen Fall der Verschlüsselung des Loopback-Schnittstellenverkehrs beeinträchtigen kann . Weitere Informationen finden Sie in dieser Diskussion zum Node-Projekt auf GitHub.





https