那天我搞了个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那东西状态和路径对不对。想提速?先从缓存和均衡负载下手,但别搞过头,调得太高说不定就适得其反了。
得了,今天个的闲聊就到此结束。有啥疑惑尽管在评论区开炮。觉得这事挺带劲的,点个赞再悠哉地闪人!