NGINX дээр тусад нь PHP-FPM Pools хэрхэн тохируулах талаар
Нийтэлсэн: 2025 оны гуравдугаар сарын 19 21:27:00 (UTC)
Энэ нийтлэлд би олон PHP-FPM сан ажиллуулах, NGINX-ийг FastCGI-ээр дамжуулан холбоход шаардлагатай тохиргооны алхмуудыг давж, виртуал хостуудын хооронд процессыг салгах, тусгаарлах боломжийг олгодог.
How to Set Up Separate PHP-FPM Pools in NGINX
Энэхүү постын мэдээлэл нь NGINX 1.4.6 болон PHP-FPM 5.5.9-ийг Ubuntu Server 14.04 x64 дээр ажиллуулж байгаа дээр тулгуурласан болно. Энэ нь бусад хувилбаруудад хамаарах эсэх нь тодорхойгүй. (Шинэчлэлт: Би баталгаажуулж чадна, Ubuntu Server 24.04, PHP-FPM 8.3 болон NGINX 1.24.0 дээр энэхүү постын бүх заавар одоо ч ажилласаар байна)
Олон PHP-FPM хүүхдийн процессын сантай болох нь бүх зүйлийг нэг саванд хийхээс илүү олон давуу талтай. Аюулгүй байдал, тусгаарлалт/изоляци болон нөөцийн удирдлагыг хэд хэдэн гол давуу талууд гэж нэрлэж болно.
Таны мотиваци ямар ч байлаа гэсэн, энэ пост нь танд үүнийг хийхэд туслах болно :-)
1-р хэсэг – Шинэ PHP-FPM савыг тохируулах
Эхлээд, PHP-FPM нь өөрийн савын тохиргоонуудыг хадгалдаг директорийг олох хэрэгтэй. Ubuntu 14.04 дээр, энэ нь /etc/php5/fpm/pool.d-эд байрладаг. Энд аль хэдийн www.conf гэдэг файл байгаа байх бөгөөд энэ нь үндсэн савын тохиргоог агуулдаг. Хэрвээ та өмнө нь энэ файлыг хараагүй бол, энэ файлыг үзэж, өөрийн тохиргоонд тохируулах хэрэгтэй байх магадлалтай, учир нь анхдагч тохиргоонууд нь харьцангуй хүчгүй серверт зориулагдсан байдаг, гэхдээ одоо бол зүгээр л үүний хувийг хийнэ үү гэдгийг эхнээс нь хийхгүйгээр:
Мэдээж, “mypool”-ийг таны хүссэн нэрээр сольж болно.
Одоо шинэ файлыг nano эсвэл өөрийн дуртай текст засварлагч ашиглан нээн, зорилгодоо тохируулна уу. Та хүүхдийн процессуудын тоог тохируулах эсвэл ямар хэрэглэгч болон бүлэг дор ажиллахыг тохируулах хэрэгтэй байж магадгүй, гэхдээ заавал өөрчлөх ёстой хоёр тохиргоо нь савын нэр болон энэ нь ямар хаяг руу сонсох гэж байна вэ гэдгийг зааж өгч байгаа listen заавар байх ёстой, тэгэхгүй бол энэ нь одоогийн савтай зөрчилдөж, зүйлс ажиллахгүй болно.
Савын нэр нь файлын дээд хэсэгт байна, дөрвөлжин хаалтанд байгаа. Анхдагч нь [www] байна. Үүнийг хүссэн нэрээрээ солино уу; би зөвлөж байна, энэ нь тохиргооны файлынхаа нэртэй адил байхыг санал болгож байна, тиймээс энэ жишээний хувьд үүнийг [mypool] гэж сольж болно. Хэрвээ та үүнийг сольж өгөхгүй бол PHP-FPM зөвхөн энэ нэртэй анхны тохиргооны файлыг л ачаалж, энэ нь зөрчилдөж болзошгүй юм.
Дараа нь сонсох гэж байгаа хаягаа эсвэл хаягийг өөрчлөх хэрэгтэй, энэ нь listen заавраар тодорхойлогдсон байдаг. Анхдагчийн хувьд, PHP-FPM нь Unix сокетуудыг ашигладаг тул таны listen заавар дараах байдлаар харагдах магадлалтай:
Та үүнийг хүссэн ямар ч хүчинтэй нэрээр өөрчилж болно, гэхдээ дахин хэлэхэд би тохиргооны файлын нэртэй төстэй зүйлсийг ашиглахыг санал болгож байна, тиймээс та үүнийг дараах байдлаар тохируулж болно:
За, файлыг хадгалаад текст засварлагчаас гарна уу.
2-р хэсэг – NGINX виртуал хостын тохиргоог шинэчлэх
Одоо та NGINX виртуал хостын файлыг нээж, шинэ сав руу холбох FastCGI тохиргоог хүсэж байгаа газраа оруулах хэрэгтэй – эсвэл өөрөөр хэлбэл, шинэ сокеттой холбох.
Ubuntu 14.04 дээр, эдгээр нь /etc/nginx/sites-available-д хадгалагдсан байдаг, гэхдээ өөр газарт тодорхойлогдож болох юм. Та магадгүй виртуал хостын тохиргоо хаана байрлаж байгааг сайн мэдэх байх ;-)
Хамааралтай тохиргооны файлыг дуртай текст засварлагчаар нээгээд fastcgi_pass зааврыг хайж олоорой (энэ нь байрлалын контекстэд байх ёстой) PHP-FPM сокетыг тодорхойлж байна. Та энэ утгыг шинэ PHP-FPM савын тохиргоотой тохируулах хэрэгтэй, тэгэхдээ жишээний дагуу үүнийг дараах байдлаар өөрчлөх хэрэгтэй:
fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Дараа нь энэ файлыг хадгалаад хаана уу. Та бараг дууссан байна.
3-р хэсэг – PHP-FPM болон NGINX-ийг дахин эхлүүлэх
Та хийсэн тохиргооны өөрчлөлтүүдийг ашиглахын тулд PHP-FPM болон NGINX-ийг дахин эхлүүлэх хэрэгтэй. Энэ нь магадгүй зүгээр л reload хийхэд хангалттай байж болох ч би үүнийг хэд хэдэн тохиргооны дагуу хэр зэрэг үр дүнтэй болохыг олж мэдээгүй, зарим тохиргооны хувьд restart хийх хэрэгтэй байсан. Энэ тусгай тохиолдолд, би хуучин PHP-FPM хүүхдийн процессуудыг даруй устгахыг хүссэн учраас PHP-FPM-ийг дахин эхлүүлэх шаардлагатай байсан, харин NGINX-д дахин ачаалах нь хангалттай байж болох юм. Өөрөө туршаад үзээрэй.
sudo service nginx restart
Тэгээд voila, та дууссан байна. Хэрвээ та бүх зүйлийг зөв хийсэн бол, та засварласан виртуал хост одоо шинэ PHP-FPM савыг ашиглах бөгөөд бусад виртуал хостуудтай хүүхдийн процессуудыг хуваалцахгүй байх ёстой.