簡體   English   中英

為Express和Nginx配置HTTPS

[英]Configuring HTTPS for Express and Nginx

我正在嘗試配置我的ExpressJS應用程序以進行https連接。 Express服務器運行在localhost:8080和安全的localhost:8443。

這是與https相關的server.js代碼:

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"));

這是我的Nginx配置:

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;
    }
}

我做了什么 :

  • 使用針對域fire.mydomain.me的Letsencrypt certonly工具生成SSL證書。
  • 配置nginx。
  • 配置server.js節點應用程序。
  • 在Ufw中為443端口添加TCP規則。

我試過了

  • 在server.js中注釋not-ssl服務器行以強制連接通過ssl配置:當我嘗試訪問fire.mydomain.me:443而不是“https:// fire.mydomain”時,這會為頁面提供服務。我”。 在這兩種情況下,都沒有SSL。 嘗試訪問https:// fire.mydomain.me會在Google Chrome中生成此消息“此網站無法提供安全連接”。

  • 我首先按照本教程設置我的ssl節點配置: https//medium.com/@yash.kulshrestha/using-lets-encrypt-with-express-e069c7abe625#.93jgjlgsc

您不需要在nginx反向代理和在同一主機上運行的Node應用程序之間使用HTTPS。 您可以將端口80的HTTP請求和端口443的HTTPS請求代理到Node應用程序中的同一端口 - 在這種情況下為8080 - 在這種情況下您不需要配置TLS證書。

您可以將server.js文件更改為:

var app = express();

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

並使用具有proxy_pass http://localhost:8080;的nginx配置proxy_pass http://localhost:8080; 對於端口80上的HTTP和端口443上的HTTPS。

這就是通常的做法。 加密環回接口上的流量不會增加任何安全性,因為要嗅探您需要root訪問該框的流量,當您擁有它時,您可以讀取證書並解密流量。 考慮到https://nodejs.org/en/blog/vulnerability/上的大多數帖子都與OpenSSL相關,可以說在Node中使用SSL可以降低加密環回接口流量的特殊情況下的安全性。 有關詳細信息,請參閱GitHub上Node項目的討論

感謝@rsp解決方案,這是工作的Nginx配置:

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;
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM