[英]Nginx to give HTTPS over port 10000 and Basic Auth for Express app?
[英]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;
}
}
我做了什么 :
我試過了
在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.