ThinkPHP生产环境部署关键在入口隔离、权限控制、环境变量生效、路由转发和安全加固:Web根目录必须为public,Nginx root指向/public;用try_files替代if重写;runtime和uploads目录需www-data可写且权限755/644;禁止访问/runtime等敏感路径;APP_ENV与.env双机制配对生效;PHP ≥ 7.4且必需扩展齐全。

配置ThinkPHP生产环境不是简单上传代码,关键在入口隔离、权限控制、环境变量生效、路由转发和安全加固
Web服务器根目录必须指向public
绝不能把项目根目录(含app、config、route等)设为Web可访问路径。否则数据库配置、环境文件可能被直接下载。
- Nginx配置中root必须是
/var/www/your-project/public,不是项目根目录 - 推荐使用
try_files $uri $uri/ /index.php?$query_string;替代if判断,更稳定可靠 - PHP处理块中
SCRIPT_FILENAME要用$realpath_root$fastcgi_script_name,避免软链接下“No input file specified”错误
确保runtime和上传目录可写且权限合理
ThinkPHP运行时生成缓存、日志、模板编译文件,全依赖runtime目录;用户上传的图片、附件则存在public/uploads等路径。
- 执行命令:
sudo chown -R www-data:www-data runtime public/uploads - 目录权限设为
755,文件权限设为644 - 在Nginx配置中显式禁止访问敏感路径,例如:
location ^~ /runtime { deny all; }
APP_ENV + .env双机制必须配对生效
ThinkPHP不靠改代码切换环境,而是靠APP_ENV决定加载哪个配置目录,再由.env覆盖具体值。
立即学习“PHP免费学习笔记(深入)”;
- 在Nginx的
fastcgi_param中设置:fastcgi_param APP_ENV prod; -
config/prod/目录必须存在,且至少包含app.php、database.php、cache.php、log.php -
.env文件不能提交到Git,需确保.gitignore已加入该文件 - 验证是否生效:在代码中
var_dump(config('app.app_debug'))应返回false
PHP扩展与版本必须满足框架要求
ThinkPHP 6.1+要求PHP ≥ 7.4,TP8强制要求PHP ≥ 8.0.0。光看php -v不够,要确认扩展真实加载。
- 运行:
php -m | grep -E "mbstring|openssl|pdo|pdo_mysql|curl|fileinfo",缺一不可 - 重点检查FPM配置(如
/etc/php/8.1/fpm/php.ini),而非CLI的ini文件 - 若用Ubuntu PPA源安装,注意
php8.1-fpm和php8.1-cli的配置文件是分开的



















