Yii框架作为高性能的PHP开发框架,在Nginx服务器环境下部署时,需要正确配置Nginx的路由重写、PHP解析等规则,才能保证项目正常运行。下面将从环境准备到完整配置逐步说明。

一、部署前环境准备
在配置Nginx之前,需要先确保服务器已经安装好以下基础环境:
- PHP 7.4及以上版本,并且安装对应的PHP_FPM服务
- Nginx 1.18及以上稳定版本
- Yii框架项目代码已经上传到服务器指定目录,比如
/var/www/yii_project
可以通过下面的命令检查PHP_FPM服务是否正常运行:
# 检查PHP_FPM服务状态 systemctl status php-fpm # 如果未启动则执行启动命令 systemctl start php-fpm
二、Nginx核心配置详解
Yii框架默认使用路由美化规则,需要Nginx支持路径重写,同时要将PHP请求转发给PHP_FPM处理,下面是完整的Nginx站点配置示例:
server {
# 监听端口,默认80端口,HTTPS可改为443并添加SSL配置
listen 80;
# 站点域名,替换为自己的实际域名
server_name yii_demo.ipipp.com;
# Yii项目根目录,指向项目的web目录
root /var/www/yii_project/web;
# 默认索引文件
index index.php index.html index.htm;
# 字符集设置
charset utf-8;
# 访问日志和错误日志路径,可按需调整
access_log /var/log/nginx/yii_access.log;
error_log /var/log/nginx/yii_error.log;
# 核心路由重写规则,支持Yii的友好URL
location / {
# 尝试直接访问文件或目录,都不存在则重写到index.php
try_files $uri $uri/ /index.php$is_args$args;
}
# PHP脚本解析配置,对接PHP_FPM
location ~ .php$ {
# 包含FastCGI默认配置
include fastcgi_params;
# FastCGI服务地址,根据实际PHP_FPM配置调整,默认一般是unix套接字或者127.0.0.1:9000
fastcgi_pass unix:/run/php-fpm/www.sock;
# 或者TCP方式:fastcgi_pass 127.0.0.1:9000;
# 指定PHP脚本文件路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 其他FastCGI参数
fastcgi_param DOCUMENT_ROOT $document_root;
}
# 禁止访问隐藏文件,比如.git、.env等
location ~ /. {
deny all;
}
# 静态资源缓存配置,提升访问速度
location ~* .(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 30d;
access_log off;
}
}
三、配置生效与验证
完成Nginx配置后,需要先检查配置是否有语法错误,再重新加载Nginx服务:
# 检查Nginx配置语法 nginx -t # 配置无误后重载Nginx systemctl reload nginx
之后可以通过浏览器访问配置的域名,如果能够正常打开Yii的欢迎页面,说明基础部署成功。如果出现502错误,一般是PHP_FPM的fastcgi_pass地址配置错误,需要检查PHP_FPM的监听地址是否和Nginx配置一致;如果出现404错误,需要检查root路径是否指向了Yii项目的web目录,以及路由重写规则是否正确。
四、常见问题排查
部署过程中可能遇到以下常见问题,可以按照对应思路排查:
- PHP脚本无法解析:检查
fastcgi_param SCRIPT_FILENAME是否配置正确,确保路径指向实际的PHP文件路径 - 路由访问报错:确认
try_files规则是否正确,Yii的入口文件在web目录下的index.php,不要指向项目根目录 - 静态资源加载失败:检查静态资源的location规则是否生效,或者文件权限是否正确,确保Nginx用户有读取权限
- 权限问题:Yii项目的runtime和web/assets目录需要给Nginx运行用户写入权限,可以执行
chmod -R 755 /var/www/yii_project/runtime调整
按照以上步骤完成配置后,Yii框架就可以在Nginx环境下稳定运行,后续如果有HTTPS需求,只需要在Nginx配置中添加对应的SSL证书相关配置即可。