[英]nodejs + nginx getting 502 error when using https module instead of http
我已經制作了我的nodejs應用程序,並將其托管在數字海洋服務器上,並將其連接到域名,並且一切正常,但是當我嘗試放入ssl證書(使用https模塊而不是http)時,它不起作用。 這是一個代碼:
var sslopt = {
key : fs.readFileSync('./ssl/server.key'),
cert : fs.readFileSync('./ssl/server.crt'),
ca : [fs.readFileSync('./ssl/ca1.crt'), fs.readFileSync('./ssl/ca2.crt')]
};
var server = https.createServer(sslopt,function(req,res){
...
});
server.listen(8001,function(err){
...
});
我的nodejs應用運行正常,但是如果我嘗試訪問它,我只會看到502 Bad Gateway錯誤,並且沒有請求發送到我的nodejs應用。 打開我的Nginx錯誤日志后,我看到了錯誤
-date- -time- [錯誤] 18116#18116:* 1 recv()失敗(104:對等連接重置),同時從上游讀取響應標頭,客戶端:-ip-,服務器:-server-,請求:“ GET / HTTP / 1.1”,上游:“ http://127.0.0.1:8001/ ”,主機:-host-
但是最奇怪的是,如果我嘗試使用https協議和端口8001(https:// {domainname} .com:8001)進行訪問,我可以看到我的應用程序運行正常,但連接不安全。
我只是不明白我在做什么錯...
PS
我的Nginx配置文件
server {
listen *:443;
listen *:80;
server_name {myhostname};
access_log /var/log/nginx/qt.access.log;
error_log /var/log/nginx/qt.error.log;
root /srv/qt;
index index.html index.htm index.php;
# Headers to pass to proxy server.
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_cache_bypass $http_upgrade;
proxy_http_version 1.1;
proxy_redirect off;
# Go to next upstream after if server down.
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
proxy_connect_timeout 5s;
# Gateway timeout.
proxy_read_timeout 20s;
proxy_send_timeout 20s;
# Buffer settings.
proxy_buffers 8 32k;
proxy_buffer_size 64k;
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
認識到這是一個舊帖子,希望它仍然可以對某人有所幫助。 我只是想出了什么似乎是同一回事,這與代理服務器有關。
我的NodeJS服務器在沒有SSL的情況下可以正常工作,但是當我使用https時,502卻沒有到達服務器。
// =============================================================================
// START THE SERVER
var port = process.env.PORT || 8080; // set our port
https.createServer({
key: fs.readFileSync('./certs/private.key'),
cert: fs.readFileSync('./certs/cert.crt')
}, app).listen(port);
//app.listen(port);
console.log('API Active on port ' + port);
我的客戶端和服務器使用Squid3代理服務器位於pfSense防火牆后面。
當我調用api.mydomain.com:8080/myroute時,pfSense控制api.mydomain.com的DNS並將流量路由到我的開發服務器。 我有api.mydomain.com的有效SSL / TLS證書
取消注釋app.listen(port)行,一切正常。
取消注釋https.createServer(...)后,我收到502錯誤,流量從未到達服務器。
修理:
對我來說,彩虹出現了,藍鳥也唱歌了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.