如何把多个站点作为目录映射到一个域名上?


在 Baklib,我们理解大型企业和业务多元化的客户常常有这样的需求:您可能为不同的产品线、部门或语种创建了多个独立的 Baklib 站点,并希望由不同的团队进行维护。但对外的品牌形象上,您又期望将这些站点统一在一个主域名下,通过不同的目录路径来访问,例如:
www.yourcompany.com/product-a/www.yourcompany.com/product-b/www.yourcompany.com/cn/docs/www.yourcompany.com/en/docs/
这样既能保持品牌形象的统一,又能实现内部管理的独立与高效。Baklib 的 “反向代理模式” 功能正是为此而生。本文档将指导您如何配置和使用此功能。
一、 用户场景
假设您的公司(YourCompany)有三个核心产品:Cloud、Studio 和 Fabric。您希望在 Baklib 上为每个产品分别创建帮助中心,并由各自的产品团队独立管理。对外,您不希望使用三个独立的域名(如
cloud-help.com, studio-help.com),而是希望将它们整合到公司的主帮助域名 help.yourcompany.com 下,通过目录进行区分:- 访问
help.yourcompany.com/cloud/显示 Cloud 产品的帮助中心。 - 访问
help.yourcompany.com/studio/显示 Studio 产品的帮助中心。 - 访问
help.yourcompany.com/fabric/显示 Fabric 产品的帮助中心。
通过反向代理配置,您可以完美实现这一目标。
二、 如何配置与使用
整个配置过程分为两步:在 Baklib 后台获取站点信息,然后在您自己的 Nginx 服务器上进行配置。
步骤 1:在 Baklib 后台获取配置信息
对于每一个需要通过目录访问的站点,您都需要独立完成以下操作来获取其专属配置信息。
- 导航至域名管理 进入目标站点的 Baklib 后台,在左侧菜单栏依次点击 “应用设置” -> “域名管理”。
- 绑定一个内部识别域名
- 点击 “绑定域名” 按钮。
- 在弹出的输入框中,您需要为当前站点设置一个仅用于内部识别的域名。这个域名的作用是作为您 Nginx 配置中的
Host标识,来告诉 Baklib 您想请求哪个具体站点。 - 强烈推荐使用
.local作为后缀,以确保它不会与任何真实的公共域名冲突。 - 格式建议:
产品名.公司名.local - 示例:假设您的产品是 Cloud,公司是 YourCompany,您可以填写
cloud.yourcompany.local。
- 切换至反向代理模式并获取参数
- 域名绑定成功后,在列表中找到您刚刚添加的
.local域名,点击其右侧的 “配置” 按钮。 - 在弹出的窗口中,将“部署模式”切换为 “反向代理模式”。
- 切换后,界面将展示 Nginx 配置所需的全部关键信息。请记录或复制它们,以备下一步使用:
- 入口域名:这是您站点被访问的真实域名,非常重要。例如,填写
help.yourcompany.com。 - 部署路径 :如果您希望站点在域名的某个子目录下访问(如
/app),请填写此项。如果站点直接在根目录,请留空。注意: 路径不能以/结尾。例如,填写/cloud - Token:这是一个安全凭证,用于验证请求的合法性。请妥善保管,并将其配置到 Nginx 中。
- 入口域名:这是您站点被访问的真实域名,非常重要。例如,填写
- 域名绑定成功后,在列表中找到您刚刚添加的
对您的每一个产品站点(如 Cloud, Studio, Fabric 等)重复以上步骤,即可获得所有站点的独立配置信息。如 Nginx 配置示例
# Nginx 配置示例, 实现用户访问 help.yourcompany.com/cloud 等于访问 cloud.yourcompany.local
# 通过此配置可将多个站点统一管理在同一域名的不同目录下
server {
listen 80;
server_name help.yourcompany.com;
location /cloud/ {
rewrite ^/cloud/(.*)$ /$1 break;
proxy_pass http://site-7kr1j63g.cname.baklib.site;
proxy_set_header Host cloud.yourcompany.local;
# 用于验证自建反向代理的身份, 如果 Token 泄漏可点击上面的重置凭证按钮
proxy_set_header baklib-x-token 4607d3f686c3f0362fa45f383033a89a;
proxy_set_header baklib-x-script-name /cloud;
proxy_set_header baklib-x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header baklib-x-forwarded-host $server_name;
proxy_set_header baklib-x-forwarded-proto $scheme;
proxy_set_header baklib-x-forwarded-port $server_port;
}
}
步骤 2:配置您自己的 Nginx 服务器
您需要准备一台自己的服务器,并安装好 Nginx。然后,编辑 Nginx 的配置文件(通常是
nginx.conf 或在 conf.d 目录下的自定义配置文件),参考以下格式进行配置。以下是一个完整的配置示例,它实现了将
help.yourcompany.com 域名下的多个目录(/cloud/, /studio/ 等)映射到不同的 Baklib 站点。server {
listen 443 ssl http2; # 推荐使用 443 端口和 SSL 加密
server_name help.yourcompany.com; # 这里填写您自己的主域名
# SSL 证书配置 (请替换为您自己的证书路径)
ssl_certificate cert/yourcompany.com.pem;
ssl_certificate_key cert/yourcompany.com.key;
# ... 其他 SSL 和服务器配置 ...
# === 映射第一个站点:Cloud ===
# 访问 help.yourcompany.com/cloud/
location /cloud/ {
rewrite ^/cloud/(.*)$ /$1 break;
proxy_pass http://site-kr1j63gx.cname.baklib.site;
proxy_set_header Host cloud.yourcompany.local;
# 用于验证自建反向代理的身份, 如果 Token 泄漏可点击上面的重置凭证按钮
proxy_set_header baklib-x-token 4607d3f686c3f0362fa45f383033a89a;
proxy_set_header baklib-x-script-name /cloud;
proxy_set_header baklib-x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header baklib-x-forwarded-host $server_name;
proxy_set_header baklib-x-forwarded-proto $scheme;
proxy_set_header baklib-x-forwarded-port $server_port;
}
# === 映射第二个站点:Studio ===
# 访问 help.yourcompany.com/studio/
location /studio/ {
rewrite ^/studio/(.*)$ /$1 break;
proxy_pass http://site-7kr2j63g.cname.baklib.site;
proxy_set_header Host studio.yourcompany.local;
# 用于验证自建反向代理的身份, 如果 Token 泄漏可点击上面的重置凭证按钮
proxy_set_header baklib-x-token a1e9335164d214aee1f224d0f432c9f9;
proxy_set_header baklib-x-script-name /studio;
proxy_set_header baklib-x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header baklib-x-forwarded-host $server_name;
proxy_set_header baklib-x-forwarded-proto $scheme;
proxy_set_header baklib-x-forwarded-port $server_port;
}
# ... 您可以根据需要,添加任意多个 location 块来映射更多站点 ...
}
关键配置说明:
server_name: 填写您对外展示的主域名。location /path/: 定义一个目录路径。当用户访问这个路径时,该location块内的规则生效。proxy_pass: 必须填写对应 Baklib 站点后台提供的CNAME地址。proxy_set_header Host: 必须填写对应 Baklib 站点后台绑定的以.local结尾的域名。proxy_set_header baklib-x-token: 必须填写对应 Baklib 站点后台生成的 Token。proxy_set_header baklib-x-script-name: 必须填写,并且值与location的路径保持一致,这能确保站点内的链接(如CSS、JS文件)生成正确。
配置完成后,保存文件并重新加载或重启 Nginx 服务。现在,您就可以通过
help.yourcompany.com/cloud/ 来访问您的 Cloud 产品站点。三、 实现原理
这个功能的实现原理是基于 Nginx 的反向代理(Reverse Proxy) 机制。
您可以将您的 Nginx 服务器想象成一个智能的“总前台”或“交通枢纽”。
- 用户请求:当一个用户在浏览器输入
https://help.yourcompany.com/cloud/时,这个请求首先到达的是您的 Nginx 服务器。 - 路径匹配:Nginx 服务器作为“总前台”,查看请求的路径是
/cloud/。它会在自己的规则手册(配置文件)里查找,发现有一个location /cloud/的规则与之匹配。 - 请求转发:匹配成功后,Nginx 并不会自己处理这个请求,而是扮演代理的角色。它会悄悄地将这个请求转发给规则中指定的“后台专家”——也就是 Baklib 的服务器(由
proxy_pass指定)。 - 附加信息:在转发请求时,Nginx 会附上几张“便签”(HTTP Headers),告诉 Baklib:
- “你好,这个请求是想访问
cloud.yourcompany.local这个站点”(通过proxy_set_header Host)。 - “这是我的身份凭证
976d6f...,证明我是合法的请求者”(通过proxy_set_header baklib-x-token)。
- “你好,这个请求是想访问
- Baklib 处理:Baklib 的服务器收到请求后,会检查这些“便签”。它验证 Token,然后根据 Host 知道用户想要的是
cloud.yourcompany.local站点的内容,于是将该站点的页面数据准备好。 - 返回响应:Baklib 将页面数据返回给 Nginx 服务器。
- 最终呈现:Nginx 服务器再将收到的内容原封不动地交给用户的浏览器。
在整个过程中,最终用户始终认为自己访问的是
help.yourcompany.com,他们完全感知不到背后复杂的请求转发和站点路由过程。这既保证了用户体验的统一性,也赋予了您灵活强大的站点管理能力。总结
