Ubuntu 20.04 LEMP服务器Nginx证书加载权限错误排查与修复求助
Ubuntu 20.04 LEMP服务器Nginx证书加载权限错误排查与修复求助
嗨,我来帮你拆解这个问题!首先得明确:这个错误确实是Nginx尝试读取证书文件时被系统权限阻止了,但你的网站还能正常访问,核心原因是——Nginx早在权限出问题之前就已经成功加载证书到内存里了,当前的连接还能依赖内存里的证书正常运行。但这绝对是个预警:一旦Nginx重启、证书自动续期后需要重新加载,你的网站大概率会直接挂掉,所以必须赶紧修复。
下面是一步步的排查和修复方案:
1. 定位权限问题根源
首先我们得确认证书相关文件和目录的权限配置:
- 先检查
live目录的权限(注意这里面的文件是符号链接,指向真实证书文件):
正常情况下,这个目录的所有者是ls -ld /etc/letsencrypt/live/postfixadmin.mysite.com/root:root,权限至少要有o+x(其他用户的执行权限,这样Nginx用户才能进入目录)。 - 再检查真实证书文件的权限(
live里的文件是链接到archive目录的):
真实的ls -l /etc/letsencrypt/archive/postfixadmin.mysite.com/.pem文件应该是root:root所有,权限至少是644(其他用户能读取)。
2. 确认Nginx的运行用户
Nginx是用哪个用户运行的?执行下面的命令查看:
grep -r "user " /etc/nginx/
默认是www-data,如果你的配置改了用户,后续权限调整要对应这个用户。
3. 修复权限问题
根据上面的排查结果,针对性调整:
- 如果是目录权限不足,给
live和archive目录添加其他用户的执行权限:sudo chmod o+x /etc/letsencrypt/live/ /etc/letsencrypt/archive/ - 确保证书文件能被Nginx读取:
sudo chmod o+r /etc/letsencrypt/archive/postfixadmin.mysite.com/*.pem - 另外,Let's Encrypt的
certbot工具默认会维护正确的权限,如果你不确定哪里出问题,可以用模拟续期命令让它自动修复权限:sudo certbot renew --dry-run
4. 验证修复是否成功
最后一步要确认问题解决:
- 重启Nginx,让它重新加载配置和证书:
sudo systemctl restart nginx - 实时查看错误日志,确认不再出现那个
[emerg]错误:sudo tail -f /var/log/nginx/error.log
如果重启后日志里没有再报权限错误,那问题就彻底解决啦!
备注:内容来源于stack exchange,提问作者DanRan
相关产品推荐
相关产品推荐

