安装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 块:
- # 前端:监听 8080 端口
- server {
- listen 8080;
- server_name localhost;
- root /path/to/yii2-advanced/frontend/web;
- index index.php;
- location / {
- try_files $uri $uri/ /index.php?$args;
- }
- location ~ \.php$ {
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
- }
- # 后台:监听 8081 端口
- server {
- listen 8081;
- server_name localhost;
- root /path/to/yii2-advanced/backend/web;
- index index.php;
- location / {
- try_files $uri $uri/ /index.php?$args;
- }
- location ~ \.php$ {
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
- }
✅ 修改后重载 Nginx:
sudo nginx -t && sudo nginx -s reload
然后访问:
前端:http://localhost:8080
后台:http://localhost:8081
Apache 中配置不同端口(可选)
编辑 httpd.conf 或虚拟主机配置,启用监听多个端口:
- Listen 8080
- Listen 8081
- <VirtualHost *:8080>
- DocumentRoot "/path/to/yii2-advanced/frontend/web"
- ServerName localhost
- <Directory "/path/to/yii2-advanced/frontend/web">
- AllowOverride All
- Require all granted
- </Directory>
- </VirtualHost>
- <VirtualHost *:8081>
- DocumentRoot "/path/to/yii2-advanced/backend/web"
- ServerName localhost
- <Directory "/path/to/yii2-advanced/backend/web">
- AllowOverride All
- Require all granted
- </Directory>
- </VirtualHost>
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 内置服务器(不推荐用于后台,因不支持多并发和静态资源优化):
- # 启动前端(另开终端)
- php -S localhost:8080 -t frontend/web frontend/web/router.php
- # 启动后台(再开终端)
- 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如何分别配置前后端端口
- 上一篇:Laravel LTS版本到底值不值得选?
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)
