如何修复将nginx与ssl一起使用时的PR_END_OF_FILE_ERROR



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

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

以下是完整的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;
}
}
}

当我尝试使用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)

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

ssl_password_file       /etc/nginx/pass;

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

对于其他有此问题的人。。如果您忘记将ssl添加到侦听指令中,也可能发生这种情况。Chrome显示ERR_SSL_PROTOCOL_ERROR,而Firefox显示PR_END_OF_FILE_ERROR

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
...
}

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

注意:-d

其中一个虚拟主机定义中缺少default_server配置(带ssl或/和不带ssl(,如下所示:

server {
listen 80 default_server;
listen 443 default_server;
...

在运行Apache和Nginx服务器时,我在Firefox中获得了PR_END_OF_FILE_ERROR,这两次都是因为我忘记在配置中监听端口443。始终仔细检查端口。

最新更新