当前位置:首页 > CMS教程 > 其它CMS > 列表

安装Yii2高级版后如何分别配置前后端端口?【操作】

发布:smiling 来源: PHP粉丝网  添加日期:2026-07-05 18:25:51 浏览: 评论:0 

Yii2高级模板前后端必须通过Web服务器配置不同端口或域名实现物理隔离,而非子路径;因二者是独立入口应用,共用子路径会导致session、cookie、CSRF及asset冲突。

Yii2高级模板本身不通过端口区分前后端,而是靠Web服务器虚拟主机配置实现物理隔离。所谓“配端口”,其实是为 frontend 和 backend 分别绑定不同监听端口(如 8080 和 8081),让它们成为两个独立的 HTTP 服务。

这比用子路径(如 /admin)更安全、更符合高级模板设计初衷,也能彻底避免 session、cookie、CSRF token 的交叉干扰。

前端和后台必须使用不同端口或域名,不能共用同一端口下的子路径

Yii2 高级模板的 frontend/web/index.php 和 backend/web/index.php 是两个完全独立的 Web 应用入口。它们各自加载自己的配置、路由、用户组件和会话策略。

若强行把 backend 放在 frontend 下(例如 http://localhost:8000/backend),会导致:

后台登录后前台自动登录(共享 user 组件和 cookie)

刷新页面丢失身份(session 路径冲突)

asset 发布错乱、AJAX 请求跨域失败

所以正确做法是:让 Web 服务器为两者分别监听不同端口,并指向各自 web/ 目录。

Nginx 中为前后端配置不同端口(推荐)

在 nginx.conf 或站点配置文件中添加两个 server 块:

  1. # 前端:监听 8080 端口 
  2. server { 
  3.     listen       8080; 
  4.     server_name  localhost; 
  5.     root         /path/to/yii2-advanced/frontend/web; 
  6.     index        index.php; 
  7.  
  8.     location / { 
  9.         try_files $uri $uri/ /index.php?$args
  10.     } 
  11.  
  12.     location ~ \.php$ { 
  13.         fastcgi_pass   127.0.0.1:9000; 
  14.         fastcgi_index  index.php; 
  15.         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name
  16.         include        fastcgi_params; 
  17.     } 
  18.  
  19. # 后台:监听 8081 端口 
  20. server { 
  21.     listen       8081; 
  22.     server_name  localhost; 
  23.     root         /path/to/yii2-advanced/backend/web; 
  24.     index        index.php; 
  25.  
  26.     location / { 
  27.         try_files $uri $uri/ /index.php?$args
  28.     } 
  29.  
  30.     location ~ \.php$ { 
  31.         fastcgi_pass   127.0.0.1:9000; 
  32.         fastcgi_index  index.php; 
  33.         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name
  34.         include        fastcgi_params; 
  35.     } 

✅ 修改后重载 Nginx:

sudo nginx -t && sudo nginx -s reload

然后访问:

前端:http://localhost:8080

后台:http://localhost:8081

Apache 中配置不同端口(可选)

编辑 httpd.conf 或虚拟主机配置,启用监听多个端口:

  1. Listen 8080 
  2. Listen 8081 
  3.  
  4. <VirtualHost *:8080> 
  5.     DocumentRoot "/path/to/yii2-advanced/frontend/web" 
  6.     ServerName localhost 
  7.     <Directory "/path/to/yii2-advanced/frontend/web"
  8.         AllowOverride All 
  9.         Require all granted 
  10.     </Directory> 
  11. </VirtualHost> 
  12.  
  13. <VirtualHost *:8081> 
  14.     DocumentRoot "/path/to/yii2-advanced/backend/web" 
  15.     ServerName localhost 
  16.     <Directory "/path/to/yii2-advanced/backend/web"
  17.         AllowOverride All 
  18.         Require all granted 
  19.     </Directory> 
  20. </VirtualHost> 
✅ 重启 Apache:

sudo apachectl restart

关键检查项(避免白屏/404/登录失效)

✅ frontend/web/index.php 和 backend/web/index.php 文件都存在且未被移动

✅ 两个入口文件第13行都是 (new yii\web\Application($config))->run();(不是 console\Application)

✅ YII_ENV 在两个入口文件里一致(如 'dev'),否则配置加载错乱

✅ 数据库已建好,common/config/main-local.php 中 db 配置正确

✅ 已执行 ./yii migrate,且后台有独立 admin 表(非共用 user 表)

✅ backend/config/main.php 中 user.identityClass 指向 common\models\AdminModel,cookie.path 设为 / 或 /(若用端口隔离,可不设 path;若用子路径则必须设)

补充说明:为什么不用改 Yii2 内部端口?

Yii2 是 PHP 框架,不直接监听端口 —— 端口由 Web 服务器(Nginx/Apache)或 PHP 内置服务器控制。

你不能在 config/web.php 里写 "port" => 8081 这类配置,那无效。真正起作用的是 Web 服务器如何把请求分发给哪个 index.php。

如果只是本地开发临时测试,也可用 PHP 内置服务器(不推荐用于后台,因不支持多并发和静态资源优化):

  1. # 启动前端(另开终端) 
  2. php -S localhost:8080 -t frontend/web frontend/web/router.php 
  3.  
  4. # 启动后台(再开终端) 
  5. php -S localhost:8081 -t backend/web backend/web/router.php 

但注意:PHP 内置服务器不解析 .htaccess,也不支持 try_files,路由需靠 router.php 手动转发,仅适合快速验证。

实际部署时,端口方案适合开发与测试环境;生产环境更推荐不同域名(如 www.site.com + admin.site.com),安全性与可维护性更高。

Tags: 安装Yii2高级版 Yii2如何分别配置前后端端口

分享到: