PHP-FPM和Nginx这对黄金搭档为何不给力?揭秘速度慢的真相

那天我搞了个PHP网页,速度慢得跟乌龟爬似的。一查原因,发现PHP-FPM和Nginx这对“黄金搭档”不给力。我赶紧研究怎么给它们升级,结果发现里面的门道还真不少。今天就给大家聊聊这对搭档怎么才能和谐共处,顺便也给大家分享一下我自己踩过的那些坑。

PHP-FPM是啥?能吃吗?

PHP-FPM,就是那货,速度嗖嗖的小CGI进程管理员,PHP的贴心小弟。说白了,PHP的进程小霸王,专干Web服务器(比如Nginx)给它派的任务。以前咱们用的是那个mod_php,那东西慢得跟蜗牛似的,PHP-FPM就是为了治这个慢癌,搞个特效药来救急。

Nginx又是啥?能吃吗?

Nginx这东西,性能杠杠的,HTTP服务器和反向代理玩得溜到飞起,处理静态资源和应对高并发就像吃小菜一样简单。跟PHP-FPM这货搭档,简直就是Web开发界的绝配,俩人一联手,效果那叫一个猛。

怎么让Nginx和PHP-FPM搞基?

你得安装这俩货。假设你用的是Ubuntu,可以这么安装:


这东西得先来个sudo apt-get,然后给它装上nginx和php-fpm,全套装备一个都不能少。

搞完东西,咱得给Nginx和PHP-FPM整份配置。这Nginx的配置文件,通常躲在/etc/nginx/sites-available/default这旮旯,你把它打开,得瞧见那个server区块,然后往里头塞这么一段:


location ~ \.php$ {
把那个快枪手PHP配置文件给弄进来。
这事得这么搞,得派那个fastcgi小弟去,然后它得沿着Unix路径一路狂飙,直奔那神秘的地方,就是那个叫作/var/run/php/php7.4-fpm.sock的东西,别瞎转悠。
}

这配置说穿了就是,Nginx要是碰上.php后缀的请求,就得把活儿甩给PHP-FPM来搞定。你看那个fastcgi_pass后面跟的路径,其实就是PHP-FPM那Unix套接字文件的藏身之处,而且还得根据你用的PHP版本来调整,搞不好还得手动改改路径。
<b>PHP-FPM的配置</b>
咱这PHP-FPM的配置文件通常藏得挺深,就在/etc/php/7.4/fpm/pool.d/www.conf这角落里(前提是你用的PHP得是7.4那款)。得费点劲把这文件挖出来,然后得在里头找到那个listen参数,还得跟Nginx那边的fastcgi_pass玩个对接游戏。
ini

这东西搁那儿,悠着点,别乱摸乱动,它有个名儿叫php7.4-fpm.sock。

重启服务

配置完了以后,重启Nginx和PHP-FPM:

sudo systemctl restart nginx

兄弟,赶紧来,把这PHP7.4的FPM重启一下,让它赶紧上岗,别让咱们的网站再卡得跟狗一样了!快,别磨蹭!

这时候,访问你的PHP文件,应该就能正常工作了。

踩过的坑

权限这块儿可得当心,Nginx和PHP-FPM那俩家伙,运行时用的用户可差远了,搞错了这权限问题就跟着来了。尤其是那个Unix套接字文件,/var/run/php/php7.4-fpm.sock,可得保证Nginx能顺顺利利地访问到它。

搞这东西得手动改PHP-FPM的设置,得把那俩东西listen.owner和listen.group给改个名儿,改成Nginx那家伙的名字。


   listen.owner = www-data
   然后重启PHP-FPM。
2. <b>502门闹鬼了</b>:这东西一出事,Nginx和PHP-FPM这对冤家就闹得不可开交。不是PHP-FPM还没准备好开业,就是fastcgi_pass那设置搞错了。
   检查PHP-FPM的状态:
bash

老铁,快点,咱们得瞧瞧这php7.4-fpm啥情况,靠谱不靠谱?来,用sudo systemctl status给它来个仔细检查,瞧瞧它是不是靠谱得很。


   如果PHP-FPM没启动,手动启动一下:
PHP-FPM这货启动了,可感觉不对劲,得赶紧瞧瞧那fastcgi_pass的路子是不是走错了。
这PHP-FPM处理请求慢得跟蜗牛似的,看来是进程不够用。咱们得来点狠的,把pm.max_children这个参数往上调调,给它来个加速,进程数量得加码加码再加码。
   pm.max_children = 50
   但是别调得太高,否则会占用太多内存。
<b>性能优化</b>
这缓存小东西,Nginx和PHP-FPM都能给速度来个加速。Nginx靠fastcgi_cache来存PHP的输出,PHP-FPM则是用opcache来存PHP的字节码缓存。
   Nginx的fastcgi_cache配置:
nginx

这设置挺有新意,Nginx把缓存路径藏在了“/var/cache/nginx”这地方,分了两层结构,从一级到二级,还弄了个“my_cache”区域。内存才10M,缓存容量顶多1G,闲置60分钟就得滚蛋,连临时路径都省了,简直高冷到极点。

server {

location ~ \.php$ {

fastcgi_cache my_cache;

fastcgi_cache_valid 200 60m;

快枪手PHP的配置文件,得加上去;

这事得这么搞:直接把PHP7.4的FPM套接字地址放这儿,你看,就在这:/var/run/php/php7.4-fpm.sock,懂了吗?

}

}

PHP的opcache配置:

opcache.enable=1

这货的内存消耗得设置成128,别浪费了。

这破东西的opcache加速文件最多只能存4000个,这数字还挺给力的!

opcache.revalidate_freq=60

2. 公平分配:要是手里有仨俩PHP-FPM,那就让Nginx来当分配小能手。操作流程,简单来说就是:

upstream php_fpm {

这东西是Unix系统里PHP7.4 FPM进程的连接文件,藏身于/var/run/php/这个文件夹深处,名字叫php7.4-fpm1.sock,别乱动。

fastcgi_pass php_fpm;

这东西把活儿甩给PHP-FPM的小弟们,结果处理速度嗖嗖的上涨,爽得跟什么似的!

总结

PHP-FPM加Nginx,这俩货合作无间,性能问题全搞定。配置起来简单得很,就那点权限和路径的事。碰上502故障,别慌,先看看PHP-FPM那东西状态和路径对不对。想提速?先从缓存和均衡负载下手,但别搞过头,调得太高说不定就适得其反了。

得了,今天个的闲聊就到此结束。有啥疑惑尽管在评论区开炮。觉得这事挺带劲的,点个赞再悠哉地闪人!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值