thinkphp6稳定支撑1万并发需精准配置nginx:显式注入path_info、重写规则置于php location之前并用last、硬隔离静态资源与敏感路径、协同调优连接参数。

ThinkPHP6要稳定支撑1万并发,Nginx配置不能只靠“调大数字”,关键在于精准匹配TP6的运行机制,尤其是PATH_INFO传递、重写顺序、静态资源隔离和连接复用。盲目堆worker_connections或开gzip反而可能引发500或499错误。
PATH_INFO必须显式注入,否则全站404
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顺序。TP6要求重写必须在location ~ \.php$之前触发,且必须用last而非break:
- 把以下块放在
location ~ \.php$上方(不是里面):location / {<br> if (!-e $request_filename) {<br> rewrite ^(.*)$ /index.php?s=$1 last;<br> }<br>} -
last让重写后重新进入location匹配流程,才能落到PHP处理块;用break或redirect会导致路由丢失 - 禁用
try_files $uri $uri/ /index.php?$query_string——在phpEnv、旧版宝塔、OpenResty中极易触发500或重定向循环
静态资源与敏感路径必须硬隔离
并发高时,任何一次意外访问.env或runtime目录都可能成为压垮服务器的最后一根稻草:
-
root必须设在server级,且精确指向
/var/www/your_project/public;设在location内、多一层或少一层都会导致SCRIPT_FILENAME错位,引发502 - 加三段deny规则到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) -
keepalive_timeout 15;(别设60秒,长连接占满连接池会阻塞新请求) -
gzip on; gzip_min_length 1k; gzip_types text/plain text/css application/json application/javascript;(压缩文本类响应,图片等二进制不用压)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











