先把“访问不了”拆成具体故障
HTTPS 出问题时,不要只看浏览器提示。先用命令把故障定位到网络、Nginx、证书还是站点配置。
确认域名解析到当前服务器
先在本机查解析结果:
nslookup kfnoodles.top
nslookup www.kfnoodles.top
如果你只打算使用裸域名,不使用 www,那至少要确认 kfnoodles.top 指向 AWS 服务器公网 IP。
服务器上也可以用:
curl -I http://kfnoodles.top/
curl -Iv https://kfnoodles.top/
curl -Iv 能看到 TLS 握手、证书和具体失败原因,比浏览器提示更直接。
确认 AWS 安全组放行 443
在 AWS EC2 控制台检查当前实例绑定的 Security Group。入站规则至少要有:
HTTP/HTTPS 面向公网是正常的,但 SSH 最好限制来源 IP,至少不要为了排障长期暴露给所有地址。
确认 Nginx 真的监听了 80 和 443
服务器上执行:
sudo ss -lntp | grep -E ':80|:443'
sudo nginx -t
正常情况下应该看到 Nginx 监听 :80 和 :443。如果只有 :80,HTTPS 一定访问不了。
修改配置后先测试,再重载:
sudo nginx -t
sudo systemctl reload nginx
确认证书签给了新域名
如果你用 Certbot,可以签发或补签新域名证书:
sudo certbot --nginx -d kfnoodles.top
如果同时使用 www,再加一个域名:
sudo certbot --nginx -d kfnoodles.top -d www.kfnoodles.top
检查证书时重点看两点:
- 证书里的域名包含
kfnoodles.top - Nginx 配置里的
ssl_certificate指向新域名证书路径
使用一个清晰的最小 Nginx 配置
静态站先保持配置简单,避免多个 server 块互相抢域名。示例:
server {
listen 80;
server_name kfnoodles.top;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name kfnoodles.top;
root /var/www/kfnoodles.top;
index index.html;
ssl_certificate /etc/letsencrypt/live/kfnoodles.top/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kfnoodles.top/privkey.pem;
location / {
try_files $uri $uri/ =404;
}
}
如果服务器上还保留旧域名配置,要确认旧配置没有把新域名写进同一个 server_name,也没有默认站点意外接管 443 请求。
从日志确认请求到底进了哪个站点
如果浏览器能打开但内容不对,或者返回 404,看访问日志和错误日志:
sudo tail -50 /var/log/nginx/access.log
sudo tail -50 /var/log/nginx/error.log
如果你给站点单独配置了日志,例如:
access_log /var/log/nginx/kfnoodles.top.access.log;
error_log /var/log/nginx/kfnoodles.top.error.log;
排障会更直接,能知道请求是否命中了这个站点配置。
最终验证清单
curl -I http://kfnoodles.top/
curl -I https://kfnoodles.top/
curl https://kfnoodles.top/robots.txt
curl https://kfnoodles.top/sitemap.xml
sudo nginx -t
sudo ss -lntp | grep -E ':80|:443'
http://能 301 跳转到https://https://返回200 OKrobots.txt能打开并指向 sitemapsitemap.xml返回 XML,不是 404 或旧域名- Nginx 配置测试通过,且监听 80/443
FAQ
HTTP 能访问,HTTPS 不能访问,最可能是什么问题?
优先查 443。包括 AWS 安全组是否放行 443、Nginx 是否监听 443、服务器防火墙是否拦截 443。
换了新域名后,可以继续用旧证书吗?
不能直接用。证书必须覆盖当前访问的域名,否则浏览器会提示证书不匹配。
Nginx 重载后网站访问不了怎么办?
先执行 sudo nginx -t。如果配置测试不通过,不要重载。已经重载后出问题,就看 error.log,通常能看到配置路径、证书路径或权限错误。
HTTPS 稳定后,下一步应该确认搜索引擎能读取 sitemap: