我已经制作了我的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- [error] 18116#18116:* 1 recv()失败(104:对等连接重置)从上游读取响应头,客户端:-ip-,server:-server-,request :“GET / HTTP / 1.1”,上游:“http://127.0.0.1:8001/”,主机:-host -
但最奇怪的是,如果我尝试使用https协议和端口8001(https:// {domainname} .com:8001)进行访问,我可以看到我的应用程序工作正常,但连接不安全。
我无法理解我做错了什么......
P.S。
我的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;
}
}
答案 0 :(得分:0)
认识到这是一个老帖子,希望这仍然可以帮助某人。我只是想出了什么似乎是相同的事情,这是代理服务器相关的。
我的NodeJS服务器在没有SSL的情况下工作正常,但在使用https时却没有到达服务器。
// =============================================================================
// 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防火墙后面。
pfSense控制api.mydomain.com的DNS,并在我打电话给api.mydomain.com:8080/myroute时将流量路由到我的开发服务器。我有api.mydomain.com的有效SSL / TLS证书
使用app.listen(port)行取消注释,一切都很顺利。
https.createServer(...)取消注释后出现502错误,流量从未到达服务器。
修复:
对我来说,彩虹出现了,蓝鸟也唱了。