全部
常见问题
产品动态
精选推荐
功能建议

分析中 已回复 待规划 {{opt.name}}
分析中 已回复 待规划
PHP + Nginx 反代 + 宝塔 跨域方案

管理 管理 编辑 删除

PHP + Nginx 反代 + 宝塔 是目前最稳、最省心、最少踩坑的跨域方案。

下面我直接给你一套 “照着做即可上线” 的方案,不讲空话。

一、最终推荐方案(一句话)

所有前端域名通过 Nginx 反向代理到同一个 PHP 后端,前端统一走 /api,彻底规避浏览器跨域

不需要 CORS
Cookie 天然共享登录态自动互通

最适合 CRMEB / 多后台系统


二、你的目标结构(标准)

系统域名部署
总后台www.crmeb.com前端静态
代理后台md.crmeb.com前端静态
供应商后台gys.crmeb.com前端静态
PHP API127.0.0.1:9000/www/server/php/xx同一套

API 不直接暴露给前端

三、宝塔里要做的 3 件事(顺序很重要)


第 1 步:宝塔新建 3 个站点(很重要)

宝塔 → 网站 → 新建站点

www.crmeb.com
md.crmeb.com
gys.crmeb.com

👉 每个站点都可以指向不同的前端目录

例如:

/www/wwwroot/www.crmeb.com
/www/wwwroot/md.crmeb.com
/www/wwwroot/gys.crmeb.com


第 2 步:统一 Nginx 反向代理 /api

在【每一个站点】的 Nginx 配置中加入

宝塔 → 网站 → 设置 → Nginx 配置

location /api/ {
    proxy_pass http://127.0.0.1:9000/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # 关键:Cookie 主域共享
    proxy_cookie_domain localhost .crmeb.com;
}
⚠️ 如果 PHP 是 Unix Socket,用下面的方式(推荐)
location /api/ {
    fastcgi_pass unix:/tmp/php-cgi-80.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /www/wwwroot/api/public/index.php;
}


第 3 步:前端统一走 /api

错误写法(不要再这样)

axios.get('https://api.crmeb.com/admin/login')

正确写法(关键)

axios.defaults.withCredentials = true

axios.get('/api/admin/login')

浏览器视角:

md.crmeb.com/api/admin/login

Nginx 内部转发
PHP 后端

同源,不跨域

跨域问题直接消失


四、PHP 后端只需要 1 个配置(非常关键)

Cookie 共享主域

无论你是 ThinkPHP / Laravel / 原生 PHP:

setcookie(
    'token',
    $token,
    time() + 86400,
    '/',
    '.crmeb.com',
    true,
    true
);

或 Laravel:

cookie(
    'token',
    $token,
    1440,
    '/',
    '.crmeb.com',
    true,
    true,
    false,
    'None'
);

Cookie 必须满足:

属性必须
Domain.crmeb.com
Path/
Secure
SameSiteNone


五、HTTPS(必做,否则 Cookie 会丢)

宝塔 → 网站 → SSL →
www / md / gys 全部开启 HTTPS

SameSite=None 必须 HTTPS


六、你这样部署后,会自动实现什么?

三个后台 互相免登录
登录一次,www / md / gys 都能用
不用写任何 CORS 代码
不用管 withCredentials 跨域问题
不怕浏览器升级限制


七、CRMEB 实战经验提醒(非常重要)

每个后台一个前端包

不要共用 build:

admin/
agent/
supplier/

后端用角色区分

admin_type = admin | agent | supplier

前端只控制展示
权限必须在后端兜底


八、如果你现在已经踩坑了(快速排查)

登录成功但跳回登录页?

Cookie Domain 没设 .crmeb.com


Network 有 200,但前端拿不到数据?

前端还在用 https://api.xxx.com


md / gys 请求 404?

Nginx /api/ proxy_pass 路径多了 /


{{voteData.voteSum}} 人已参与
支持
反对
请登录后查看

小码二开 最后编辑于2025-12-15 08:27:57

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}} 【已收集】
{{item.floor}}# 沙发 板凳 地板 {{item.floor}}# 【已收集】
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打赏
已打赏¥{{item.reward_price}}
{{item.like_count}}
分享
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打赏
已打赏¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
收起 展开更多
查看更多
打赏
已打赏¥{{reward_price}}
67
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

快速安全登录

使用微信扫码登录
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定
打赏金额
当前余额:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
请输入 0.1-{{reward_max_price}} 范围内的数值
打赏成功
¥{{price}}
完成 确认打赏

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服