在 Debian 上,Nginx 开启 SSL 后想“关闭 HTTP(80 端口)”,只保留 HTTPS(443),常见做法有几种,取决于你是要彻底不监听 80,还是只做 301 跳转到 HTTPS 后不再提供 HTTP 内容。
下面按场景说明(假设系统是 Debian + 官方/apt nginx)。
✅ 推荐做法(不影响证书续签,如 Let’s Encrypt)
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
⚠️ 这不是关闭 HTTP,而是禁止 HTTP 访问内容。
编辑站点配置(如 /etc/nginx/sites-enabled/example.com):
# server {
# listen 80;
# server_name example.com;
# ...
# }
只保留:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
root /var/www/html;
index index.html;
}
}
然后:
nginx -t
systemctl reload nginx
✅ 此时 80 端口不再监听
ss -lntp | grep :80
或:
curl -I http://example.com
# 应连接失败
即使 Nginx 不监听,也可以从系统层封死:
ufw deny 80/tcp
# 或
iptables -A INPUT -p tcp --dport 80 -j DROP
如果你用的是 certbot:
certbot renew
默认需要 80 端口做验证。
certbot certonly --manual --preferred-challenges dns
或
| 需求 | 做法 |
|---|---|
| 禁止 HTTP 内容 | 80 → 301 HTTPS |
| 彻底关 HTTP | 删除 listen 80 |
| 系统级关闭 | ufw / iptables |
| 证书续签 | 用 DNS 验证 |
如果你愿意,可以把 当前 nginx 配置贴出来,我可以直接帮你改成“只 HTTPS”的版本。