- 有的接口能通
- 有的 404
- 有的登录成功但状态丢
- 有的文件上传失败
下面是 「CRMEB(PHP 版)+ 宝塔 + Nginx 反代」的标准做法。
一、先明确:CRMEB 的真实接口路由长什么样?
以 CRMEB 标准目录为例(99% 用户一致)
/www/wwwroot/crmeb/
├── public/
│ └── index.php 👈 所有接口入口
├── app/
│ ├── adminapi/ 👈 平台后台接口
│ ├── merchantapi/ 👈 供应商接口
│ ├── agentapi/ 👈 代理接口
│ ├── api/ 👈 H5 / 小程序
实际接口 URL 是:
| 系统 | 原始接口 |
|---|---|
| 平台后台 | /adminapi/login |
| 代理后台 | /agentapi/login |
| 供应商后台 | /merchantapi/login |
最终全部都会进 public/index.php
二、我们要实现的目标(非常关键)
浏览器只看到:
https://md.crmeb.com/api/agentapi/login
https://gys.crmeb.com/api/merchantapi/login
https://www.crmeb.com/api/adminapi/login
但 Nginx 内部转发成:
/www/wwwroot/crmeb/public/index.php
三、CRMEB【精确匹配】Nginx 反代配置(🔥重点)
这是我给 CRMEB 专门裁剪过的版本
标准推荐版(FastCGI,最稳)
location ^~ /api/ {
# ===== PHP-FPM =====
include fastcgi_params;
fastcgi_pass unix:/tmp/php-cgi-80.sock;
# ===== CRMEB 统一入口 =====
fastcgi_param SCRIPT_FILENAME /www/wwwroot/crmeb/public/index.php;
fastcgi_param SCRIPT_NAME /index.php;
# ===== 关键:把 /api 去掉 =====
fastcgi_param PATH_INFO $uri;
fastcgi_param REQUEST_URI $request_uri;
# ===== 让 CRMEB 正确识别 HTTPS =====
fastcgi_param HTTPS on;
fastcgi_param HTTP_HOST $host;
# ===== 超时 =====
fastcgi_read_timeout 120s;
}
这一段是 CRMEB 能 100% 正常跑的关键
这一段在做什么(你要知道)
假设前端请求:
/api/adminapi/login
Nginx 实际给 PHP 的是:
/adminapi/login
CRMEB 路由正常识别
不用改一行后端代码
不用写 CORS
四、三个后台分别如何“命中自己的接口”
平台后台(www)
axios.post('/api/adminapi/login', data)
代理后台(md)
axios.post('/api/agentapi/login', data)
供应商后台(gys)
axios.post('/api/merchantapi/login', data)
🔥 这是 CRMEB 官方推荐的路由分法
五、文件上传 / 导出接口(很多人会翻车)
CRMEB 上传接口一般是:
/adminapi/upload/image
前端写成:
uploadUrl: '/api/adminapi/upload/image'
⚠️ Nginx 不要单独写 upload location
否则会绕过 PHP 路由
六、最容易踩的 5 个坑(对照自查)
| 现象 | 原因 |
|---|---|
/api/adminapi/login 404 | SCRIPT_FILENAME 没指到 public/index.php |
| 登录成功但没状态 | Cookie Domain 不是 .crmeb.com |
| md 能登,gys 不行 | 前端接口写错 agentapi / merchantapi |
| 上传失败 | Nginx 单独拦截了 upload |
| 接口 301 | location 没用 ^~ /api/ |
七、我给你的【最终推荐结构】
前端域名
│
├── www.crmeb.com → /api/adminapi/*
├── md.crmeb.com → /api/agentapi/*
├── gys.crmeb.com → /api/merchantapi/*
│
└── 统一进入
/www/wwwroot/crmeb/public/index.php

