Miklix

วิธีตั้งค่าพูล 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 อยู่แล้ว ซึ่งเก็บการตั้งค่าสำหรับพูลเริ่มต้น หากคุณยังไม่เคยดูไฟล์นั้นมาก่อน คุณควรเข้าไปดูและปรับแต่งการตั้งค่าให้เหมาะสมกับระบบของคุณ เพราะค่าเริ่มต้นนั้นเหมาะสำหรับเซิร์ฟเวอร์ที่มีประสิทธิภาพค่อนข้างต่ำ แต่สำหรับตอนนี้ ให้คัดลอกไฟล์นั้นไว้ก่อน เพื่อที่เราจะได้ไม่ต้องเริ่มต้นใหม่ทั้งหมด:

sudo cp www.conf mypool.conf

แน่นอน คุณสามารถเปลี่ยน “mypool” เป็นชื่อที่คุณต้องการตั้งให้กับสระว่ายน้ำของคุณได้

ทีนี้เปิดไฟล์ใหม่โดยใช้ nano หรือโปรแกรมแก้ไขข้อความที่คุณถนัด แล้วปรับแต่งให้ตรงกับความต้องการของคุณ คุณอาจต้องการปรับเปลี่ยนจำนวนกระบวนการย่อย และอาจรวมถึงผู้ใช้และกลุ่มที่พูลทำงานอยู่ แต่การตั้งค่าสองอย่างที่คุณต้องเปลี่ยนอย่างแน่นอนคือชื่อของพูลและซ็อกเก็ตที่พูลกำลังรับฟัง มิฉะนั้นจะเกิดความขัดแย้งกับพูลที่มีอยู่แล้วและทุกอย่างจะหยุดทำงาน

ชื่อของพูลจะอยู่ใกล้กับส่วนบนสุดของไฟล์ โดยอยู่ในวงเล็บเหลี่ยม โดยค่าเริ่มต้นจะเป็น [www] เปลี่ยนเป็นชื่ออะไรก็ได้ที่คุณต้องการ ผมแนะนำให้ใช้ชื่อเดียวกับที่คุณตั้งไว้ในไฟล์การกำหนดค่า เช่น ในตัวอย่างนี้ให้เปลี่ยนเป็น [mypool] หากคุณไม่เปลี่ยนชื่อ ดูเหมือนว่า PHP-FPM จะโหลดเฉพาะไฟล์การกำหนดค่าแรกที่มีชื่อนั้น ซึ่งอาจทำให้เกิดปัญหาได้

จากนั้นคุณต้องเปลี่ยนซ็อกเก็ตหรือที่อยู่ที่จะใช้รับฟัง ซึ่งกำหนดโดยคำสั่ง listen โดยค่าเริ่มต้น PHP-FPM ใช้ซ็อกเก็ต Unix ดังนั้นคำสั่ง listen ของคุณน่าจะมีลักษณะดังนี้:

listen = /var/run/php5-fpm.sock

คุณสามารถเปลี่ยนชื่อเป็นชื่อใดก็ได้ที่ถูกต้อง แต่ขอแนะนำให้ใช้ชื่อที่คล้ายกับชื่อไฟล์การกำหนดค่า ตัวอย่างเช่น คุณอาจตั้งชื่อเป็น:

listen = /var/run/php5-fpm-mypool.sock

เอาล่ะ บันทึกไฟล์แล้วปิดโปรแกรมแก้ไขข้อความ

ส่วนที่ 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 php5-fpm restart
sudo service nginx restart

และเสร็จเรียบร้อยแล้ว หากคุณทำทุกอย่างถูกต้อง โฮสต์เสมือนที่คุณแก้ไขควรจะใช้พูล PHP-FPM ใหม่แล้ว และจะไม่แชร์กระบวนการย่อยกับโฮสต์เสมือนอื่น ๆ

แชร์บนบลูสกายแชร์บนเฟสบุ๊คแชร์บน LinkedInแชร์บน Tumblrแชร์บน Xแชร์บน LinkedInปักหมุดบน Pinterest

มิคเคล คริสเตนเซ่น

เกี่ยวกับผู้เขียน

มิคเคล คริสเตนเซ่น
ไมเคิล คือผู้สร้างและเจ้าของเว็บไซต์ miklix.com เขามีประสบการณ์เป็นโปรแกรมเมอร์/นักพัฒนาซอฟต์แวร์คอมพิวเตอร์มืออาชีพมากว่า 20 ปี และปัจจุบันทำงานเต็มเวลาให้กับบริษัทไอทีขนาดใหญ่แห่งหนึ่งในยุโรป เมื่อไม่ได้เขียนบล็อก เขาจะใช้เวลาว่างไปกับความสนใจ งานอดิเรก และกิจกรรมต่างๆ มากมาย ซึ่งในระดับหนึ่งอาจสะท้อนให้เห็นได้จากหัวข้อต่างๆ มากมายที่กล่าวถึงในเว็บไซต์นี้