thinkphp 通过 dns、nginx、框架路由与应用结构四层协同,以独立 swagger 应用、专属 server 块、swagger.php 入口及静态资源路由实现二级域名 api 文档隔离。

ThinkPHP 配置二级域名实现 Swagger API 文档隔离,核心是让 api.example.com 独立承载文档站点,与主站(www.example.com)和后台(admin.example.com)完全解耦,既保障安全性,又避免路由冲突、权限干扰或静态资源污染。这不是简单改个 URL,而是需在 DNS、Web 服务器、框架路由、应用结构四层协同落地。
一、前置:确认多应用结构已就绪
Swagger 文档站点建议作为独立应用部署(如 app/swagger/),而非挂载在 admin 或 api 模块下。这样可单独配置中间件、静态资源路径和访问策略。
- 执行
php think build swagger创建独立应用目录 - 确保
app/下存在swagger/目录,含自己的controller/、route.php和config/ - 删除根目录
app/controller/(触发 ThinkPHP 进入多应用识别模式)
二、Nginx 配置专属 server 块
不依赖 PHP 层解析 Host,直接由 Web 服务器分发请求,性能更稳、上下文更干净。这是生产环境推荐方式。
- 新增 Nginx 配置文件(如
/etc/nginx/conf.d/swagger.conf) -
server_name设为api.example.com(注意不是 www 或 admin) -
root指向项目public/目录(非 swagger 子目录) -
index设为swagger.php(自定义入口文件) - 在
location ~ \.php$中显式传参:fastcgi_param SCRIPT_FILENAME $document_root/swagger.php;
三、创建独立入口文件 swagger.php
该文件位于 public/swagger.php,内容精简明确:
- 定义
APP_NAME = 'swagger' - 引入框架自动加载器:
require __DIR__ . '/../vendor/autoload.php'; - 启动应用:
(new think\App())->run()->send();
此举确保所有请求进入 app/swagger/ 应用上下文,与其它应用物理隔离。
四、Swagger 静态资源与路由绑定
Swagger UI 是前端静态页面,需正确暴露资源并配置后端接口代理(如需):
- 将 Swagger UI 文件(如
dist/)放入public/static/swagger/ - 在
app/swagger/route.php中注册首页路由:Route::get('/', function () { return redirect('/static/swagger/index.html'); }); - 若需对接真实 API 接口,可在该应用内配置反向代理中间件,或通过 CORS 允许跨域调用
api.example.com的后端服务
不复杂但容易忽略
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











