服务器 http 强制跳转 https 如何配置
学完这篇你能把服务器的所有 http 请求自动跳到 https,覆盖 Nginx、Apache、IIS、宝塔面板四种常见环境,并知道怎么验证和排错。
第一步:先确认 https 本身已经能正常访问
这一步的目标是排除「证书没配好就急着做跳转」的常见错误,做完你应该能用 https 正常打开网站。
在浏览器里输入 https://你的域名,确认地址栏出现锁头图标、页面正常。或者在服务器上执行:
curl -I https://example.com
返回 HTTP/2 200 之类的正常状态码即可。如果这里就报证书错误或 502,先解决证书问题,再往下做跳转。
注意:证书必须和访问的域名完全匹配(
example.com和www.example.com算两个域名,需要证书里都包含,或用泛域名证书),否则浏览器会拦。
第二步:Nginx 配置跳转(最常用)
这一步要做的是把 80 端口的请求全部 301 到 443,做完后访问 http://example.com 会自动变成 https://example.com。
打开配置文件,通常在 /etc/nginx/conf.d/example.com.conf 或 /etc/nginx/sites-available/example.com,写入两个 server 块:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.pem;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
root /var/www/html;
index index.html;
}
保存后执行 nginx -t 检查语法,通过再执行 systemctl reload nginx 让配置生效。
注意:不要写成
return 301 https://example.com$request_uri;,这会把www的子域名用户强行跳到主域名。用$host能保留用户原本访问的域名。另外别在 80 的 server 里再套一层if,return效率更高也不会出错。
第三步:Apache 配置跳转
这一步和上一步目标一样,只是换成 Apache。先确认重写模块已开启。
Ubuntu/Debian 执行 sudo a2enmod rewrite && sudo systemctl restart apache2;CentOS/RHEL 一般默认已加载 mod_rewrite。
编辑 80 端口的虚拟主机配置,Ubuntu 在 /etc/apache2/sites-available/000-default.conf,CentOS 在 /etc/httpd/conf.d/vhost.conf,在 <VirtualHost *:80> 里加入:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
保存后执行 sudo apachectl configtest 检查,再 sudo systemctl reload httpd(Ubuntu 是 apache2)。
注意:如果站点配置里
AllowOverride是None,写在.htaccess里的跳转规则不会生效,必须写在虚拟主机配置里,或把目录的AllowOverride改成All。
第四步:IIS 配置跳转(Windows Server)
这一步面向 Windows Server + IIS 环境,先确认已安装「URL 重写」模块(微软官网下载 URL Rewrite 2.1,装完在 IIS 管理器首页能看到「URL 重写」图标)。
打开 IIS 管理器 → 左侧展开服务器 → 「网站」→ 选中你的站点 → 中间功能区双击「URL 重写」→ 右侧「添加规则」→ 选「空白规则」。填写:
- 名称:
Redirect to HTTPS - 请求的 URL:选「匹配模式」,模式填
(.*) - 条件:点「添加」,条件输入
{HTTPS},模式^OFF$ - 操作类型:
重定向 - 重定向 URL:
https://{HTTP_HOST}/{R:1} - 重定向类型:
301
点右上角「应用」保存。然后用无痕窗口访问 http://你的域名 验证。
注意:IIS 自带的「HTTP 重定向」功能也能整站跳转,但它无法保留原始域名和路径的灵活组合,多域名站点建议用上面的 URL 重写规则。
第五步:宝塔面板一键开启(新手最快)
这一步适合用宝塔面板管理服务器的人,不用手写配置。
登录宝塔面板 8.x → 左侧菜单「网站」→ 找到你的站点,点「设置」→ 弹出窗口中选「SSL」标签页 → 找到「强制 HTTPS」开关,打开它。面板会自动往 Nginx 配置里写入 301 跳转规则并重载服务。
注意:开启后如果网站出现「重定向次数过多」,通常是站点本身又装了 WordPress 之类的强制 https 插件,两边规则打架,关掉其中一个即可。
第六步:验证跳转是否真的生效
这一步确认配置落到实处,得到的结果是命令行返回 301 且 Location 指向 https。
执行:
curl -I http://example.com
正确输出类似:
HTTP/1.1 301 Moved Permanently
Location: https://example.com/
浏览器测试请开无痕窗口,因为 301 是永久重定向,会被浏览器长期缓存,改配置后旧窗口可能看不到效果。
注意:调试阶段建议先用
302临时重定向,确认路径、参数都正常后再改成301。如果你用了 CDN,还要在 CDN 后台把「回源协议」设为 HTTPS,否则源站跳转和 CDN 回源可能互相拉扯。
小结
- 跳转的前提是 https 本身能正常访问,先验证再配置。
- Nginx 用 80 端口的
return 301 https://$host$request_uri;,改完nginx -t再 reload。 - Apache 靠
mod_rewrite,规则写虚拟主机里,注意AllowOverride。 - IIS 装 URL Rewrite 2.1,用空白规则 +
{HTTPS}条件实现 301。 - 宝塔面板直接开「SSL → 强制 HTTPS」开关。
- 用
curl -I验证,调试期用 302,稳定后再换 301。
原文链接:https://www.gj0.com/thread-681.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。