【发布时间】:2021-07-01 22:33:08
【问题描述】:
编辑:
我已经验证 nodejs 在正确的端口上运行,在 http 上,我也尝试过使用和不使用:
app.use('trust proxy', true);
编辑 2:
我关闭了nodejs服务器并尝试仅使用nginx提供静态文件,并且错误仍然存在,所以显然这与nginx和我的ssl证书有关。
我的域是来自 freenom 的免费域,并且 ssl 证书是使用 certbot 生成的。
原文:
我有一个 nodejs 服务器正在运行,并且想使用 nginx 和代理到 nodejs 服务器。 (Nginx https -> nodejs http)
运行nginx -t 不会出错。
在ubuntu上20.04.2,nginx 1.18.0node 14.5.5
我已验证我的网站通过 http(在端口 3000 上)可以正常工作,但在 https 上通过浏览器访问时出现以下错误:
ERR_SSL_PROTOCOL_ERROR
如果我使用 openssl cli 尝试连接,我会得到这个
openssl s_client -connect my_domain.com:443 -servername my_domain.com
CONNECTED(00000003)
139662603941184:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../ssl/record/ssl3_record.c:331:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 310 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
/etc/nginx/conf.d/ssl.conf
server {
listen 443 ssl;
ssl_certificate /server/resources/cert.pem;
ssl_certificate_key /server/resources/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
}
【问题讨论】:
-
如果您能看到任何错误,请添加有关该错误的更多详细信息
-
此错误通常与访问未启用 SSL 的服务器有关。检查 nginx 的日志文件,尤其是错误日志。另请注意,nginx 配置的其他部分中的错误可能会导致此类问题,例如某些服务器也在侦听端口 443 但未启用 ssl。
-
@SteffenUllrich
access.log和error.log都是空的 -
不太可能,您可能查看了错误的文件。或者,也许您禁用了日志记录。至少应该有关于服务器启动的信息,并且通常会有关于 ssl 错误的信息。或者
my_domain.com:443实际上并没有访问你配置的服务器,即DNS没有解析到服务器的IP地址。 -
@SteffenUllrich 我验证日志记录已启用并检查了正确的日志文件,并更改了
my_domain并尝试使用 ip,仍然产生相同的错误。