托管在SiteGround上的网站如何实现反向代理?

通过Kingsway的域名绑定功能,可以实现视频独立站以子目录的方式访问,所有内容权重都集中在主域名下,对搜索引擎排名更有利,操作过程需要设置域名反向代理。

在网站托管领域,SiteGround 以其卓越的性能和用户友好的界面而备受推崇。然而,当涉及到更高级的服务器配置,例如为你的域名设置反向代理时,许多用户可能会感到困惑。本文旨在提供一份详尽的指南,阐述在 SiteGround 托管环境下如何实现域名反向代理及具体操作方法,若网站托管在hostinger等,操作也是一样的。

1. SiteGround 的服务器架构与反向代理的限制

对于使用 SiteGround 共享主机(Shared Hosting)计划的用户来说,直接修改 NGINX 配置文件以设置自定义反向代理是不被允许的。

  • 权限限制: 在共享主机环境中,为了防止单个用户的错误配置影响到服务器上的其他用户,核心的服务器配置文件(如 NGINX 的配置文件)是不对用户开放的。
  • 管理复杂性: 开放 NGINX 的完全配置权限会极大地增加服务器管理的复杂性和潜在风险。

2. 利用 Cloudflare 实现反向代理

虽然无法直接在 SiteGround 的共享主机环境中修改服务器配置来实现反向代理,但通过 Cloudflare Workers,你可以轻松地将特定路径(/videos)的流量无缝代理到另一台服务器。Cloudflare Workers 允许你在 Cloudflare 的全球边缘网络上运行代码,从而在不影响您主站的情况下,实现对特定目录请求的拦截和转发。

这种方法不仅能实现代理需求,浏览器地址栏中的 URL 还会保持不变,对用户完全透明,同时也能享受到 Cloudflare 带来的 CDN 加速和安全防护,不需要动你的 SiteGround 服务器。

1. 让 Cloudflare 管理你的域名

在开始之前,必须先把你的域名交给 Cloudflare 管理。

  • 注册并登录 Cloudflare:访问 Cloudflare 官网,如果你还没有账户,就注册一个。
  • 添加你的网站:登录后,点击“添加站点”,然后输入你的域名(比如 yourwebsite.com),选择快速扫描DNS记录,接着按照提示选择Free免费计划。
  • 更换域名服务器 (最关键的一步)
    • Cloudflare 会给你两个新的域名服务器地址(看起来像 ada.ns.cloudflare.com 这样的)。
    • 你需要登录到你购买域名的地方(比如 GoDaddy、阿里云、腾讯云等),找到 DNS 或域名服务器(Nameserver/NS)的设置。
    • 把原来的域名服务器地址,换成 Cloudflare 提供给你的这两个新地址,然后保存。

提醒:这个更换过程需要一些时间才能生效,可能要几分钟,也可能要几个小时,请耐心等待。当 Cloudflare 网站上显示你的站点已激活时,你就可以进行下一步了。

2. 创建并粘贴代理代码

现在,我们要创建一个“智能小助理”(也就是 Cloudflare Worker),它会帮你判断并转发流量。

  • 进入 Worker 界面:在 Cloudflare 控制台的左侧菜单,找到并点击 “Workers路由”,“管理Workers
  • 创建 Worker:选择“创建”,“从Hello World!开始”。你可以直接点击“部署”按钮,使用系统默认生成的名字。
  • 编辑代码:部署成功后,点击“编辑代码”按钮。你会看到一个代码编辑器,请删掉里面所有的默认代码,然后把下面的代码完整地复制粘贴进去。
export default {
  async fetch(request, env, ctx) {
    const url = new URL(request.url);

    // 定义您的目标服务地址
    const destinationHost = "watch.kingswayvideo.com";

    // 当前域名
    const currentHost = url.hostname;

    // 检查请求的路径是否以 /videos 开头
    if (url.pathname.startsWith("/videos")) {
      // 保持原始路径,不去掉 /videos 前缀,和 Nginx 行为一致
      const newUrl = new URL(
        url.pathname + url.search,
        `https://${destinationHost}`
      );

      // 创建新的请求头,复制原始请求头
      const newHeaders = new Headers(request.headers);

      // 设置 Host 头为后端域名,和 Nginx 一致
      newHeaders.set("Host", destinationHost);

      // 设置 自定义 header 为当前域名
      newHeaders.set("x-kingsway-proxy-original-host", `${currentHost}`);

      // 创建一个新的请求,转发到目标服务
      const newRequest = new Request(newUrl, {
        method: request.method,
        headers: newHeaders,
        body: request.body,
        redirect: "follow",
      });

      // 获取目标服务的响应并返回
      let response = await fetch(newRequest);

      // 创建一个可变的响应副本
      response = new Response(response.body, response);

      // 处理重定向,保持和 Nginx 一致的行为
      const location = response.headers.get("Location");
      if (location) {
        const newLocation = location.replace(
          `https://${destinationHost}`,
          `https://${currentHost}`
        );
        response.headers.set("Location", newLocation);
      }

      // 可选:为了安全,可以移除一些不必要的响应头
      response.headers.delete("X-Powered-By");

      return response;
    }

    // 如果请求路径不是 /videos,则正常访问 SiteGround 上的原始站点
    return fetch(request);
  },
};
  • 保存并部署:点击蓝色的“保存并部署”按钮。

3. 设置触发规则

现在你的“小助理”已经准备好了,但你还需要告诉它在什么时候工作。

  • 进入设置:返回到你刚刚创建的 Worker 的管理界面,找到并点击“设置” 选项卡。
  • 添加路由:在“域和路由”部分,点击“添加”。
  • 填写路由规则
    • 路由 (Route):在这里填入 *yourwebsite.com/videos*
      • 注意:请把 yourwebsite.com 换成你自己的真实域名。
      • 前后的两个 * 号是通配符,意思是只要访问你域名下的 /videos 目录(包括目录里的任何文件),这个规则都会生效。
    • Worker: 会自动选择你当前编辑的这个 Worker。
    • 最后点击“保存”。

4. 检查效果

恭喜你,全部设置完成了!现在来测试一下:

  • 访问 https://yourwebsite.com,应该看到的是你托管在 SiteGround 上的主网站。
  • 访问 https://yourwebsite.com/videos/,这时你应该能看到存放在Kingsway上的视频,但浏览器的地址栏显示的网址依然是 yourwebsite.com 开头。

3. 利用 Cloudflare 实现HTML网页加速

Cloudflare默认只会自动缓存您网站的“静态”资源,比如图片、CSS和JS文件。但它不会默认缓存HTML页面本身。具体操作可参考教程,如何通过Cloudflare页面规则,3步大幅提升网站速度并解决LCP问题

通过以上步骤,你就成功地利用 Cloudflare 在不改动 SiteGround 配置的情况下,实现了对特定目录的反向代理,这是一种既灵活又强大的解决方案。

FAQ

1. 这个操作需要花钱吗?Cloudflare 的免费计划能一直用吗?

你完全可以放心,本教程描述的所有操作都可以在 Cloudflare 的免费计划下完成,不需要任何费用。Cloudflare 的核心免费计划是长期有效的,并不是试用。同时,我们用到的 Cloudflare Workers 功能也有一个非常慷慨的免费额度,对于绝大多数个人独立站来说完全足够了。

2. 既然是免费的,那我什么时候才需要考虑付费呢?

当你网站的流量变得非常大时,你才可能需要考虑付费。Cloudflare Workers 的免费计划每天提供 10 万次请求

  • 什么是“请求”? 用户每访问一次你的 /videos 目录下的页面或加载一个视频文件,都算一次请求。
  • 10万次多吗? 非常多!对于刚起步或中小型网站来说,每天的视频访问量很难超过这个数字。只有当你的网站发展成一个热门的视频站,每天有数万甚至十万人来访问视频时,你才需要考虑升级到付费计划。

3. 这个方法会影响我主站(SiteGround 上)的速度吗?

通常不会,反而可能会让你的网站整体速度变得更快。 因为 Cloudflare 本身就是一个全球 CDN(内容分发网络),它会缓存你主站的静态内容(如图片、CSS 文件),并从离访客最近的服务器提供,从而加快访问速度。而 /videos 目录的访问速度,则取决于你那台视频服务器的性能。

4. 用户访问视频时,浏览器地址栏的网址会变吗?

不会变! 这正是这个方法最大的优点。用户访问 https://yourwebsite.com/videos/ 时,地址栏显示的网址就是这个,他们完全感觉不到内容其实来自另一台服务器。这让你的网站看起来非常专业和统一。

5. 设置这个反向代理复杂吗?如果我搞错了怎么办?

一点也不复杂,你只要严格按照教程的步骤操作就行。 最容易出错的地方就是复制粘贴代码和设置路由规则。

  • 如果搞错了:最坏的情况也只是 /videos 目录无法访问,并不会影响你托管在 SiteGround 上的主网站
  • 如何修正:你可以随时回到 Cloudflare 的 Worker 编辑器里修改代码,或者在“触发器”页面修改或删除路由规则,影响会立刻消失。
目录

相关内容

14天全部功能免费试用

点击按钮后你将跳转到Kingsway英文官网的注册页面,注册后就可以免费试用了。

让每一个视频都为你赢得商业机会,让每一次播放都为你带来询盘价值。

售前咨询 & 普通咨询

另外,我们已经准备了一个帮助中心,建议你在联系之前先看看,也许你的问题和答案都已经在那里清楚说明了。

让你在视频中拿到询盘

点击按钮后跳转到Kingsway英文官网的注册页面,你注册后在页面右上角点击upgrade按钮可以进行支付了。

让每一个视频都为你赢得商业机会,让每一次播放都为你带来询盘价值。

在你离开前,免费获得大量关于视频引流和获客的资源!
添加Kingsway运营人员微信

立刻获得Kingsway为你准备的 免费礼物包

Kingsway为你准备下面这个礼品包: