使用Certbot申请Let's Encrypt SSL证书时出现UnicodeDecodeError错误
报错根因
这个Unicode解码报错是Certbot的Nginx集成插件在扫描解析Nginx全站配置文件时触发的:你的某份Nginx配置文件里包含了非UTF-8编码的特殊字符(0x92字节对应Windows-1252编码的右弯单引号),大多是从Windows文档里复制配置内容时直接粘贴引入的。
修复步骤
- 第一步:定位异常配置文件
执行以下命令扫描所有Nginx配置,定位包含非法字符的文件:
如果你自定义过Nginx配置存放路径,把命令里的grep -ro $'\x92' /etc/nginx//etc/nginx/替换为你的实际配置目录即可,命令执行后会直接输出异常文件的路径。 - 第二步:修正配置文件编码
打开定位到的异常文件,找到非标准的弯引号、中文全角标点等特殊字符,全部替换为英文半角标点。也可以用以下命令直接把文件转码为UTF-8格式:# 先备份原文件 cp 异常文件路径 异常文件路径.bak # 转码后覆盖原文件 iconv -f WINDOWS-1252 -t UTF-8 异常文件路径.bak > 异常文件路径 - 第三步:验证配置有效性
执行nginx -t检查配置语法是否正确,确认输出test is successful后,执行systemctl reload nginx重载Nginx配置。 - 第四步:重新执行Certbot证书申请命令即可正常生成证书。
临时替代方案
如果你暂时不想排查修改Nginx配置,可以不用Nginx集成模式,改用webroot/standalone模式申请证书,绕开Nginx配置解析步骤,示例命令如下:
# webroot模式示例,需要你的网站已经在运行 certbot certonly --webroot -w /var/www/你的网站根目录 -d 你的域名
内容的提问来源于stack exchange,提问作者patrick
相关产品推荐
相关产品推荐

