nginx - 服务器域返回 502 Bad Gateway - Nginx
问题描述
我无法通过域名访问我的服务器。它显示 502 Bad Gateway。
显示 SSL_do_handshake() 的错误日志失败。
但是当我通过 ip 地址访问时它运行成功。
/etc/nginx/sites-available/默认文件
/var/log/nginx/error.log 显示此错误 -
[error] 13728#13728: *1 SSL_do_handshake() failed (SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number) while SSL handshaking to upstream, client: 179.43.169.181, server: www.myvaccinenotifier.me, request: "GET / HTTP/1.1", upstream: "https://128.199.21.142:3000/", host: "myvaccinenotifier.me"
可能是由于nginx配置中的一些错误......帮我纠正它。
PS:我是新手。
解决方案
关于您的设置知之甚少,但可以进行以下观察:
- 在 HTTP 上有一个
proxy_pass http://127.0.0.1:3000
,这表明端口 3000 上有一些内部服务器,并且 nginx 应该作为反向代理工作 - 在 HTTPS 上有一个
proxy_pass https://128.199.21.142:3000/
,即与 HTTP 相同的端口,但不同的 IP 地址,尤其是访问上游的不同协议,即https://
代替http://
. - IP 地址是服务器本身的外部 IP 地址。所以它看起来就像你将端口 3000 上的内部应用程序也直接暴露给互联网一样。
- 只有,然后您使用
https://
and not访问此应用程序http://
。应用程序不太可能在同一端口上同时支持 HTTP 和 HTTPS,因此很可能它应该支持http://
而不是https://
访问内部应用程序。这实际上是一个常见问题,“错误的版本号”是在这种损坏的设置中看到的常见错误消息。
建议:
- 更改
proxy_pass https://128.199.21.142:3000/
为proxy_pass http://127.0.0.1:3000
,即端口 80 http 和端口 443 https 的上游完全相同。 - 不要将内部应用程序暴露在互联网上,即让它只监听 127.0.0.1 和/或使用防火墙规则阻止来自互联网的访问。
推荐阅读
- ios - 免费试用期后应用内购买一次性付款
- python - python pyserial 无法在 COM 端口建立与硬件的连接
- python - BadZipFile 仅在我使用变量时出错
- python - TensorFlow 的 QAT 似乎没有使用 AllValuesQuantizer 执行每通道量化
- firebase - 如何在 Firebase 中使用相同的电子邮件创建两个帐户
- c# - 如何在 C# 中快速搜索 word 和 Pdf 文档上的特定文本?
- cmake - 将 CLion 构建配置文件存储在存储库中
- c++ - NSString initWithBytesNoCopy 在使用 NSUTF32StringEncoding 编码时返回 nil
- javascript - 如何在 React 应用程序中为不同的页面使用自定义按钮和引导按钮?
- android - AppBarLayout 不会滚动到焦点 EditText