ThinkPHP6撑1万并发需四方面精准配置:PATH_INFO必须显式注入并严格匹配入口路径,重写规则须置于PHP location之前且用last跳转,静态资源与敏感路径须硬隔离,连接参数需Nginx与系统内核协同调优。

ThinkPHP部署Nginx要撑住1万并发,不能只改几个数字,得从PATH_INFO传递、重写逻辑、静态隔离、连接协同四方面精准下手。调错一处,就可能全站404或502。
PATH_INFO必须显式注入,否则路由全挂
ThinkPHP6默认走pathinfo模式,依赖$_SERVER['PATH_INFO']解析URL,但Nginx不自动提供。漏掉任何一环,所有路由都失效:
-
fastcgi_split_path_info规则必须严格匹配入口路径,例如入口是
public/index.php,就得写成^(/index\.php)(/.*)$,否则$fastcgi_path_info为空 - fastcgi_param PATH_INFO $fastcgi_path_info这一行必须存在且未被注释——宝塔升级PHP后常被清空,phpEnv默认根本没这行
重写规则位置和跳转方式不能错
90%的“写了rewrite却无效”问题出在location顺序和跳转类型:
- 重写块必须放在
location ~ \.php$之前,不能嵌套在里面 - 必须用
last,不能用break或redirect:rewrite ^(.*)$ /index.php?s=$1 last; -
try_files $uri $uri/ /index.php?$query_string要禁用——在phpEnv、旧版宝塔中极易引发500或重定向循环
静态资源必须硬隔离,不经过PHP
并发高时,一次误访.env或runtime目录,就可能触发敏感信息泄露或进程崩溃:
立即学习“PHP免费学习笔记(深入)”;
-
root必须设在
server级,且精确指向/var/www/your_project/public;设在location内会导致SCRIPT_FILENAME错位,引发502 - 加三段
deny all规则到server块:location ~ ^/(app|config|database|runtime|vendor)/ { deny all; }location ~ /\.(env|git|htaccess|bak|swp)$ { deny all; }location ~* \.(js|css|png|jpg|gif|ico|svg|woff2?)$ { expires 1y; add_header Cache-Control "public, immutable"; }
连接参数要系统级协同调优
单靠worker_connections 10240没用,必须配套系统限制和事件模型:
-
worker_processes auto;+worker_cpu_affinity auto;(自动绑定CPU核心,减少上下文切换) -
worker_rlimit_nofile 65535;(突破系统文件描述符限制) -
events { use epoll; worker_connections 10240; }(Linux下强制用epoll) - 同步调整系统内核:
net.core.somaxconn = 262144、fs.file-max = 2097152、ulimit -n 65535



















