วิธีตั้งค่าพูล PHP-FPM แยกกันใน NGINX
ที่ตีพิมพ์: 15 กุมภาพันธ์ 2025 เวลา 11 นาฬิกา 54 นาที 21 วินาที UTC
ปรับปรุงล่าสุด : 12 มกราคม 2026 เวลา 8 นาฬิกา 30 นาที 12 วินาที 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
ตอนนี้คุณต้องเปิดไฟล์ virtual host ของ NGINX ที่มีการกำหนดค่า FastCGI ที่คุณต้องการเปลี่ยนไปยัง pool ใหม่ หรือพูดให้ถูกคือเชื่อมต่อกับ socket ใหม่
โดยปกติแล้ว ใน Ubuntu 14.04 ไฟล์เหล่านี้จะถูกเก็บไว้ใน /etc/nginx/sites-available แต่ก็สามารถกำหนดไว้ที่อื่นได้เช่นกัน คุณน่าจะรู้ดีที่สุดว่าไฟล์การตั้งค่าโฮสต์เสมือนของคุณอยู่ที่ไหน ;-)
เปิดไฟล์การกำหนดค่าที่เกี่ยวข้องด้วยโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ แล้วมองหาคำสั่ง fastcgi_pass (ซึ่งต้องอยู่ในบริบท location) ที่กำหนดซ็อกเก็ต PHP-FPM คุณต้องเปลี่ยนค่านี้ให้ตรงกับการกำหนดค่าพูล PHP-FPM ใหม่ที่คุณทำในขั้นตอนที่หนึ่ง ดังนั้นจากตัวอย่างของเรา คุณจะต้องเปลี่ยนเป็น:
fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
จากนั้นบันทึกและปิดไฟล์นั้นด้วย คุณใกล้เสร็จแล้ว
ส่วนที่ 3 – รีสตาร์ท PHP-FPM และ NGINX
เพื่อให้การเปลี่ยนแปลงการตั้งค่าของคุณมีผล โปรดรีสตาร์ททั้ง PHP-FPM และ NGINX การรีโหลดอาจเพียงพอแทนการรีสตาร์ท แต่ผมพบว่ามันได้ผลบ้างไม่ได้ผลบ้าง ขึ้นอยู่กับการตั้งค่าที่เปลี่ยนแปลง ในกรณีนี้ ผมต้องการให้กระบวนการลูกของ PHP-FPM เก่าหยุดทำงานทันที ดังนั้นจึงจำเป็นต้องรีสตาร์ท PHP-FPM แต่สำหรับ NGINX การรีโหลดอาจเพียงพอ ลองทำดูด้วยตัวเองครับ
sudo service nginx restart
และเสร็จเรียบร้อยแล้ว หากคุณทำทุกอย่างถูกต้อง โฮสต์เสมือนที่คุณแก้ไขควรจะใช้พูล PHP-FPM ใหม่แล้ว และจะไม่แชร์กระบวนการย่อยกับโฮสต์เสมือนอื่น ๆ
