Linux下 ThinkPHP 高可用部署实践
一、总体架构与原则
二、基础设施与网络拓扑
三、Nginx + PHP-FPM 单节点正确配置要点
server {
listen 80;
server_name your_domain.com;
root /var/www/your_project/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000; # 或 unix:/var/run/php/php-fpm.sock
}
location ~ /\.env { deny all; }
location ~* \.(css|js|gif|jpe?g|png|ico|woff2?|ttf|svg|eot)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
要点说明:try_files 确保路由到 index.php;静态资源长缓存;屏蔽 .env 等敏感文件;生产关闭调试、开启 OPcache 与 CDN 可显著提升稳定性与性能。
四、多实例与数据层的高可用落地
应用层无状态化
// config/session.php
return [
'type' => 'redis',
'host' => 'redis-cluster:6379',
'password' => '******',
'prefix' => 'tp_sess:',
'expire' => 86400,
];
早期版本(如 ThinkPHP 3.2)也可将缓存与会话切换到 Memcache,解决多机不一致与文件句柄瓶颈。数据库高可用
// config/database.php
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
'deploy' => 1,
'rw_separate' => true,
'hostname' => [
'write' => ['db-master:3306'],
'read' => ['db-slave1:3306','db-slave2:3306'],
],
'database' => 'your_db',
'username' => 'app',
'password' => '******',
'charset' => 'utf8mb4',
'break_reconnect' => true,
],
],
];
读写分离与断线重连可显著降低主库压力并提升读吞吐与可用性。
五、发布、回滚与监控