gpt4 book ai didi

node.js - nodejs + nginx 在使用 https 模块而不是 http 时出现 502 错误

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:13 25 4
gpt4 key购买 nike

我已经制作了我的 nodejs 应用程序,将其托管在 digital ocean 服务器上并将其连接到域名,并且一切正常,但是当我尝试放置 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-,请求:“GET/HTTP/1.1”,上游:“http://127.0.0.1:8001/”,主机:-host-

但最奇怪的是,如果我尝试使用 https 协议(protocol)和端口 8001 (https://{domainname}.com:8001) 进行访问,我可以看到我的应用程序运行正常,但连接不安全。

我只是不明白我做错了什么......

附言

我的 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 防火墙后面。

pfSense 控制 api.mydomain.com 的 DNS,并在我调用 api.mydomain.com:8080/myroute 时将流量路由到我的开发服务器。我有 api.mydomain.com 的有效 SSL/TLS 证书

  • 取消注释 app.listen(port) 行后一切正常。

  • 在取消注释 https.createServer(...) 的情况下,我收到 502 错误并且流量从未到达服务器。

修复:

  1. 在 pfSense 中点击服务 -> Squid 代理服务器
  2. 点击 ACL配置页面
  3. 在页面底部找到该部分称为鱿鱼允许端口。
  4. 在 ACL SSL 端口字段中,输入您的端口应用程序正在使用(在我的例子中是 8080)。

对我来说,彩虹出现了, bluebird 在歌唱。

关于node.js - nodejs + nginx 在使用 https 模块而不是 http 时出现 502 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43900494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com