服务器 http 强制跳转 https 如何配置

juming
juming 初级会员超兽战士
发布于 2026-10-08 02:05 ·2 浏览 ·0 回复

学完这篇你能把服务器的所有 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。
版权声明:本文来自 GJ站长论坛《服务器 http 强制跳转 https 如何配置》
原文链接:https://www.gj0.com/thread-681.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~