将 nginx 与 ssl 结合使用时如何修复 PR_END_OF_FILE_ERROR?

Mic*_*tin 5 ssl https nginx

我正在尝试通过 nginx 反向代理 http 服务器。该服务正在侦听端口 8123,我想在 443 上代理它。我创建了一个如下的自签名证书:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
Run Code Online (Sandbox Code Playgroud)

这是完整的 nginx 配置:

events {
        worker_connections 768;
}

http {
        server {
                listen 443 ssl http2;
                listen [::]:443 ssl http2;

                ssl_certificate         /home/mcmsadm/cert.pem;
                ssl_certificate_key     /home/mcmsadm/key.pem;

                location / {
                        proxy_pass http://localhost:8123;
                }
        }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用 Firefox 连接到服务器时,它显示 PR_END_OF_FILE_ERROR。

我究竟做错了什么?谢谢!

编辑:我在日志中找到了 nginx 错误消息(没有考虑):

SSL_CTX_use_PrivateKey_file("/home/mcmsadm/key.pem") failed 
(SSL: error:2807106B:UI routines:UI_process:processing error:while reading strings
error:0906406D:PEM routines:PEM_def_callback:problems getting password 
error:0907B068:PEM routines:PEM_read_bio_PrivateKey:bad password read 
error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib)
Run Code Online (Sandbox Code Playgroud)

我确实使用密码创建了证书,但是当我通过 重新启动它时,nginx 会要求提供该证书nginx -s reload。为了暂时解决这个问题,我将密码写入一个文件中,并将这一行添加到我的nginx.conf

ssl_password_file       /etc/nginx/pass;
Run Code Online (Sandbox Code Playgroud)

有什么方法可以避免将密码写入文件中?

Mic*_*a93 0

该错误通常与浏览器无关。在我们的例子中,这也不是 nginx 的配置问题,而是防火墙的错误设置。所以从逻辑上讲,当我说这通常与浏览器、服务器端而不是客户端无关时。因此,它不是代理或 VPN。