การกำหนดค่า Nginx และ PHP-FPM
ตั้งค่า Nginx เป็นพร็อกซีย้อนกลับไปยัง PHP-FPM เพื่อให้บริการแอปพลิเคชัน PHP
การกำหนดค่า Nginx และ PHP-FPM เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงใช้ Nginx + PHP-FPM
Nginx เป็นเว็บเซิร์ฟเวอร์และพร็อกซีย้อนกลับประสิทธิภาพสูง PHP-FPM (ตัวจัดการกระบวนการ FastCGI) จัดการกลุ่มกระบวนการเวิร์กเกอร์ PHP โดย Nginx จะส่งคำขอ PHP ไปยัง FPM ผ่าน FastCGI
บล็อกเซิร์ฟเวอร์ Nginx พื้นฐาน
การกำหนดค่า Nginx ขั้นต่ำสำหรับแอปพลิเคชัน PHP
# /etc/nginx/sites-available/myapp
server {
listen 80;
server_name example.com;
root /srv/myapp/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}คำสั่ง try_files
try_files $uri $uri/ /index.php?$query_string จะพยายามให้บริการไฟล์แบบคงที่ก่อน หากไม่พบไฟล์ ระบบจะใช้ index.php เป็นทางเลือกสำรอง ซึ่งทำให้การกำหนดเส้นทางผ่านตัวควบคุมหลักทำงานได้ (Laravel, Symfony)
การกำหนดค่ากลุ่ม PHP-FPM
กำหนดค่ากลุ่มเวิร์กเกอร์ใน /etc/php/8.3/fpm/pool.d/www.conf
[www]
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pm.max_requests = 500 ; recycle workers to prevent leaksซ็อกเก็ต Unix เทียบกับ TCP
การใช้ซ็อกเก็ต Unix (fastcgi_pass unix:/run/php/php8.3-fpm.sock) เร็วกว่า TCP (127.0.0.1:9000) สำหรับการสื่อสารภายในเครื่องเดียวกัน
HTTPS ด้วย Let's Encrypt
ใช้ Certbot เพื่อขอใบรับรอง TLS ฟรี
$ certbot --nginx -d example.com
# Certbot modifies your Nginx config and sets up auto-renewalการบีบอัด Gzip
เปิดใช้ gzip เพื่อลดขนาดการตอบกลับ
# nginx.conf or server block:
gzip on;
gzip_types text/plain text/css application/javascript application/json;
gzip_min_length 1024;การแคชทรัพยากรแบบคงที่ในเบราว์เซอร์
เพิ่มส่วนหัวควบคุมแคชสำหรับไฟล์แบบคงที่
location ~* \.(js|css|png|jpg|gif|ico|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}การจำกัดอัตราใน Nginx
จำกัดจำนวนคำขอต่อ IP โดยใช้โมดูล limit_req ซึ่งเป็นแนวป้องกันด่านแรกก่อนที่ PHP จะเริ่มทำงาน
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
}
server {
location /api/ {
limit_req zone=one burst=20 nodelay;
}
}ส่วนหัวด้านความปลอดภัย
เพิ่มส่วนหัวด้านความปลอดภัยให้กับการตอบกลับทั้งหมด
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "strict-origin-when-cross-origin";โหลดใหม่เทียบกับเริ่มใหม่
หลังเปลี่ยนการกำหนดค่า Nginx ให้โหลดใหม่อย่างนุ่มนวล (โดยไม่หยุดให้บริการ): nginx -t && nginx -s reload หลังเปลี่ยนการกำหนดค่า PHP-FPM ให้ใช้: systemctl reload php8.3-fpm
สรุป
กำหนดค่า Nginx ด้วยบล็อกเซิร์ฟเวอร์ที่ชี้ไปยัง public/index.php ผ่าน FastCGI ปรับแต่งการตั้งค่ากลุ่ม PHP-FPM ใช้ซ็อกเก็ต Unix เปิดใช้ HTTPS, gzip และการแคชไฟล์แบบคงที่
ตรวจสอบความเข้าใจ
try_files $uri $uri/ /index.php?$query_string ทำหน้าที่อะไร
คำถามที่พบบ่อย
บทเรียน “การกำหนดค่า Nginx และ PHP-FPM” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การกำหนดค่า Nginx และ PHP-FPM” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดค่า Nginx และ PHP-FPM”
ตั้งค่า Nginx เป็นพร็อกซีย้อนกลับไปยัง PHP-FPM เพื่อให้บริการแอปพลิเคชัน PHP คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การกำหนดค่า Nginx และ PHP-FPM” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดค่า Nginx และ PHP-FPM
- ตัวแปรสภาพแวดล้อมและไฟล์ .env
- การนำไปใช้งานด้วย GitHub Actions
- การสร้างอิมเมจ Docker สำหรับแอปพลิเคชัน PHP