网站启用ref="/tag/83/" style="color:#479099;font-weight:bold;">HTTPS后,用户仍可能通过HTTP直接访问,比如手动输入 http://example.com,这时候页面虽然能打开,但数据没加密,存在被劫持风险。真正安全的做法,是让所有HTTP请求自动跳转到HTTPS——也就是“强制HTTPS”。
Nginx 配置:301重定向最稳妥
在Nginx的站点配置里(通常是 /etc/nginx/sites-available/example.com),把HTTP服务块设为仅做跳转:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}注意:$server_name 会保留原始域名(含www或不带www),$request_uri 确保路径和参数一并带上,比如 http://example.com/login?next=/admin 会完整跳成 https://example.com/login?next=/admin。
Apache 设置:用 .htaccess 或虚拟主机
如果用的是共享主机或支持.htaccess,把下面这段放进网站根目录的 .htaccess 文件里:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]如果是自己管理服务器,更推荐在虚拟主机配置中写:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>Cloudflare 用户:两步搞定,不用改服务器
如果你用了Cloudflare代理流量,登录后台 → 进入“SSL/TLS” → “概述”页,把加密模式设为“完全(严格)”,再点开“规则” → “创建规则”,选“重定向 HTTP 到 HTTPS”,保存即可。这个操作对源站无侵入,连Nginx/Apache都不用动。
别漏掉:HSTS头加一层保险
光跳转还不够。有些用户第一次访问时仍走HTTP,中间可能被劫持。加上HSTS响应头,浏览器就知道“以后只认HTTPS”:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;这行加在Nginx的HTTPS server块里。它告诉浏览器:未来一年内,无论用户输什么,都自动把 http:// 改成 https://,连DNS查询前就生效。注意首次访问仍需一次HTTP→HTTPS跳转,所以前面的301不能省。
检查是否生效?试试这几个动作
打开浏览器开发者工具(F12)→ Network标签 → 访问 http://yourdomain.com,看第一请求状态码是不是301,Location头是不是对应的HTTPS地址;再用curl命令:curl -I http://yourdomain.com,确认返回中有 HTTP/1.1 301 Moved Permanently 和 Location: https://...;最后用 securityheaders.com 扫描,确认HSTS已上线。