You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:13:06