温馨提示×

debian nginxssl怎样关http

小樊
44
2026-09-24 00:04:06
栏目: 云计算

在 Debian 上,Nginx 开启 SSL 后想“关闭 HTTP(80 端口)”,只保留 HTTPS(443),常见做法有几种,取决于你是要彻底不监听 80,还是只做 301 跳转到 HTTPS 后不再提供 HTTP 内容。

下面按场景说明(假设系统是 Debian + 官方/apt nginx)。


一、最常用:HTTP 强制跳转到 HTTPS(但仍监听 80)

✅ 推荐做法(不影响证书续签,如 Let’s Encrypt)

server {
    listen 80;
    server_name example.com;

    return 301 https://$host$request_uri;
}

⚠️ 这不是关闭 HTTP,而是禁止 HTTP 访问内容。


二、彻底不监听 80 端口(真正“关掉 HTTP”)

1️⃣ 删除或注释 80 端口的 server 块

编辑站点配置(如 /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 端口不再监听


2️⃣ 确认 80 已关闭

ss -lntp | grep :80

或:

curl -I http://example.com
# 应连接失败

三、防火墙层面关闭 80(可选)

即使 Nginx 不监听,也可以从系统层封死:

ufw deny 80/tcp
# 或
iptables -A INPUT -p tcp --dport 80 -j DROP

四、使用 Let’s Encrypt 时的重要提醒 ⚠️

如果你用的是 certbot:

certbot renew

默认需要 80 端口做验证。

解决方案:

  • 使用 DNS 验证(推荐)
certbot certonly --manual --preferred-challenges dns

或

  • 续签时临时开放 80

五、总结

需求 做法
禁止 HTTP 内容 80 → 301 HTTPS
彻底关 HTTP 删除 listen 80
系统级关闭 ufw / iptables
证书续签 用 DNS 验证

如果你愿意,可以把 当前 nginx 配置贴出来,我可以直接帮你改成“只 HTTPS”的版本。

0 踩