Nginx配置https证书遇到的一个问题

前言

今天在给一个站点配置 HTTPS 证书的时候,遇到了一个问题,写此文章记录一下解决过程。

环境

Ubuntu 22.04
Nginx 1.18

过程

今天给一个站点申请了 HTTPS 证书,然后在 Nginx 中进行配置,Nginx 的 SSL 配置如下:

listen 443;
ssl_certificate /etc/nginx/ssl/mysite.cer;
ssl_certificate_key /etc/nginx/ssl/mysite.key;

配置完后,访问网站报错“ERR_SSL_PROTOCOL_ERROR”,如下图:
在这里插入图片描述
凡是通过https访问的请求,在 Nginx 的 access.log 中都出现了很多\x开头的乱码字符:
在这里插入图片描述
在 shell 环境中使用curl命令访问:curl 'https://www.mysite.com/',会报错:

curl: (35) error:0A00010B:SSL routines::wrong version number

一开始以为是证书有问题,检查了一番没有头绪,最后发现是 Nginx 的配置写错了:

listen 443 ssl;
#listen [::]:443 ssl;
ssl_certificate /etc/nginx/ssl/mysite.cer;
ssl_certificate_key /etc/nginx/ssl/mysite.key;

第一行listen 443 sslssl 漏写了,后果就是,Nginx 虽然监听了443端口,但是并没有在此端口上启用SSL模块,也就是说,工作模式是跟80端口一样的,所以浏览器发送过来的加密数据Nginx无法识别,最终导致在 access.log 中看到了乱码的数据。

其它

  1. 在旧版的 Nginx 中,开启SSL模块有一个专属指令,如下图所示:
    在这里插入图片描述
    但这个指令在新版的 Nginx 中已经被废弃。

  2. 细心的人可能还会发现有一行注释的配置:listen [::]:443 ssl
    这句配置的意思是:在 ipv6 地址上监听443端口,而listen 443 ssl只在 ipv4 地址上监听,如果需要支持ipv6,可以将注释去掉。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值