วิธีตั้งค่าพูล PHP-FPM แยกกันใน NGINX
ที่ตีพิมพ์: 15 กุมภาพันธ์ 2025 เวลา 11 นาฬิกา 54 นาที 21 วินาที 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 หรือโปรแกรมแก้ไขข้อความใดก็ได้ที่คุณต้องการและปรับแต่งให้เหมาะกับวัตถุประสงค์ของคุณ คุณอาจต้องการปรับแต่งหมายเลขกระบวนการย่อยและอาจปรับแต่งผู้ใช้และกลุ่มที่พูลทำงานอยู่ แต่การตั้งค่าสองอย่างที่คุณต้องเปลี่ยนอย่างแน่นอนคือชื่อพูลและซ็อกเก็ตที่กำลังรับฟัง มิฉะนั้นจะขัดแย้งกับพูลที่มีอยู่และทุกอย่างจะหยุดทำงาน
ชื่อของพูลจะอยู่ใกล้กับส่วนบนสุดของไฟล์ โดยอยู่ในวงเล็บเหลี่ยม โดยค่าเริ่มต้นจะเป็น [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 ใหม่ที่คุณทำในขั้นตอนที่ 1 ดังนั้นให้ดำเนินการตามตัวอย่างต่อไปโดยเปลี่ยนค่านี้เป็น:
fastcgi_pass ยูนิกซ์:/var/run/php5-fpm-mypool.sock;
จากนั้นบันทึกและปิดไฟล์นั้นด้วย ตอนนี้คุณเกือบจะเสร็จแล้ว
ส่วนที่ 3 – รีสตาร์ท PHP-FPM และ NGINX
หากต้องการใช้การเปลี่ยนแปลงการกำหนดค่าที่คุณทำ ให้รีสตาร์ททั้ง PHP-FPM และ NGINX การโหลดซ้ำ อาจ เพียงพอแทนที่จะ รีสตาร์ท แต่ฉันพบว่าอาจเกิดผลต่างบ้าง ขึ้นอยู่กับการตั้งค่าที่เปลี่ยนแปลง ในกรณีเฉพาะ ฉันต้องการให้กระบวนการย่อยของ PHP-FPM เก่าหยุดทำงานทันที ดังนั้นจึงจำเป็นต้องรีสตาร์ท PHP-FPM แต่สำหรับ NGINX การโหลดซ้ำอาจเพียงพอ ลองทำด้วยตัวคุณเอง
sudo service nginx restart
และแล้วคุณก็เสร็จเรียบร้อย หากคุณทำทุกอย่างถูกต้อง โฮสต์เสมือนที่คุณแก้ไขควรจะใช้พูล PHP-FPM ใหม่ และจะไม่แชร์กระบวนการย่อยกับโฮสต์เสมือนอื่นใด