You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Nginx配置下HTTPS站点无响应,HTTP可正常重定向求助

排查HTTPS服务无响应问题的步骤

你现在遇到的情况是HTTP能正常重定向到HTTPS,但HTTPS请求完全没响应,连日志都没有——虽然Nginx配置测试通过、防火墙也开了规则,但还是得从几个核心环节逐一排查:

1. 先确认Nginx是否真的在监听443端口

配置测试通过不代表Nginx成功加载了配置并监听443,执行下面的命令检查:

ss -tulpn | grep nginx

如果输出里看不到0.0.0.0:443[::]:443的监听记录,说明Nginx没成功启动或加载配置,这时候要看Nginx错误日志找原因:

sudo tail -n 30 /var/log/nginx/error.log

常见的问题比如证书文件路径错误、权限不足,导致Nginx启动失败。

2. 检查SSL证书的权限是否正确

Certbot生成的证书默认是root用户所有,而Nginx通常以www-data用户运行,如果www-data没有读取证书的权限,Nginx会无法启动HTTPS服务。执行以下命令查看证书目录和文件的权限:

sudo ls -l /etc/letsencrypt/live/site.xyz/
sudo ls -l /etc/letsencrypt/archive/site.xyz/

如果www-data没有读取权限,用setfacl给它添加权限:

sudo setfacl -R -m u:www-data:rX /etc/letsencrypt/{live,archive}

之后重启Nginx:sudo systemctl restart nginx

3. 验证Unix Socket的状态

你的HTTPS请求是代理到/home/ubuntu/project/project.sock这个Unix Socket,必须确保:

  • Socket文件存在:
ls -l /home/ubuntu/project/project.sock

如果不存在,说明后端服务(比如Django/Flask)没启动,或者启动时没创建这个Socket,先启动后端服务。

  • Nginx有读写Socket的权限:
    Socket的权限应该至少是660,并且所属组包含www-data,如果权限不对,调整一下:
sudo chmod 660 /home/ubuntu/project/project.sock
sudo chown ubuntu:www-data /home/ubuntu/project/project.sock

(这里假设后端服务以ubuntu用户运行)

4. 显式配置HTTPS的访问日志

你当前的HTTPS server块没有指定access_log,可能全局配置没生效,导致看不到日志。在HTTPS的server块里添加一行:

access_log /var/log/nginx/site_https_access.log;

然后重启Nginx,再测试HTTPS请求,看看日志有没有生成——如果日志还是空,说明请求根本没到达Nginx,这时候要检查外部防火墙/安全组。

5. 检查云服务商的安全组(如果是云服务器)

很多云服务器除了系统层面的UFW,还有云平台的安全组规则,必须确保443端口被允许入站。比如AWS的安全组、阿里云的安全组,都要手动添加443端口的允许规则,否则外部请求根本打不到服务器。

6. 本地测试HTTPS连接

在服务器上用curl本地测试,看看能不能连接:

curl -vk https://site.xyz

-v会显示详细的连接过程,如果本地能连接,说明是外部网络的问题;如果本地也连不上,就回到前面的步骤排查Nginx或后端服务的问题。

内容的提问来源于stack exchange,提问作者Steven

火山引擎 最新活动