หนึ่งใน Web server combinations ยอดนิยมที่สุดวันนี้คือ Nginx Web server software implementation รันบน Ubuntu Server edition ระบบนี้มีประสิทธิภาพสูงและง่ายต่อการอัปเดต เนื่องจากทั้งสองแพ็กเกจยังคงได้รับอัปเดตปกติ System administrators โดยทั่วไปติดตั้งอัปเดตผ่าน apt package manager เนื่องจาก Ubuntu Server ไม่มี graphical interface โดยค่าเริ่มต้น
Ubuntu Server upgrades บางครั้งสร้าง unusual errors และการขาด graphical user interface ทำให้ beginners ยากต่อการ troubleshoot คำสั่งง่ายๆ ไม่กี่คำอาจเป็นทั้งหมดที่ต้องการเพื่อแก้ไข 404 Nginx errors หลังอัปเกรด Ubuntu
วิธีที่ 1: แก้ไข Missing Nginx Error Pages
หากเว็บไซต์โฮสต์บน AWS, private server หรือ server configuration อื่นๆ ใน LEMP stack อาจ down แบบสุ่มหลังอัปเกรด Ubuntu Server ลองเข้าถึงเว็บไซต์จาก Web browser บนเครื่องอื่น สมมติว่ามันคืน 404 error ให้ไปที่ Ubuntu Server CLI และรันคำสั่ง tail -f /var/log/nginx/error.log เพื่อดู errors ล่าสุดทั้งหมด
หาก log มีข้อผิดพลาดอย่าง:
open() "/usr/share/nginx/html/50x.html" failed (2: No such file or directory)
ระบบของคุณกำลังป่วยจาก missing error page คุณอาจเห็น 40x.html ในบรรทัดนี้ด้วย แม้จะค่อนข้าง uncommon หากเว็บไซต์ของคุณ down และคุณได้ 404 errors แทน ใช้คำสั่ง ls ดูว่ามีอะไรอยู่ที่นั่นหรือไม่ หากไม่มี คุณจะต้องสร้าง HTML code สำหรับหน้า 50X errors
จำไว้ว่าใช้ default directory structure บ่อยครั้งเป็นปัญหากับ package managers ซึ่งสามารถ overwrite ทุกอย่างที่เก็บไว้ที่นั่น คุณสามารถเปลี่ยนบรรทัด docroot ใน Nginx configuration เพื่อป้องกันปัญหาแบบนี้ หากคุณได้รับอนุญาตสร้าง custom directory structure
วิธีที่ 2: ทำให้ PHP หา Socket ที่ถูกต้อง
คุณอาจพบข้อผิดพลาดที่อ่านอย่างนี้ใน /var/log/nginx/error.log:
connect() to unix:/var/run/php/php7.0-fpm.sock failed (2: No such file or directory)
นี่หมายความว่าคุณมี PHP7.0 รันอยู่ แต่ไม่ได้รันที่ที่ควรจะเป็น หมายเลขเวอร์ชันอาจแตกต่างขึ้นอยู่กับวิธีที่คุณตั้งค่า PHP Default installations จะรันจาก /var/run/php/php7.0-fpm.sock หรือ /var/run/php5-fpm.sock แต่หากคุณมีข้อผิดพลาดนี้ น่าจะไม่ใช่กรณีนั้น
รันคำสั่ง find / -name 'php*fpm.sock' 2>/dev/null เพื่อดูว่ามี socket รันอยู่ที่ไหนบนระบบของคุณ
สมมติว่าคุณได้ positive output คุณต้อง update Nginx configuration ให้แสดงตำแหน่งที่ถูกต้องที่ socket ควรจะรัน โดยธรรมชาติ /directoryPath จะถูกแทนที่ด้วย path ที่ถูกต้อง บรรทัด unix:/directoryPath/php/php7.0-fpm.sock ควรอัปเดต configuration หากคุณใช้ socket file
ผู้ใช้ TCP sockets แบบเก่าที่ไม่ใช้ socket files สามารถตรวจสอบได้ว่ามี PHP socket กำลัง listen ที่ port 9000 หรือไม่ โดยรัน sudo netstat -tulpn | grep 9000 จากบรรทัดคำสั่ง หากเป็นเช่นนั้น ให้เปิด fastcgi_pass ใน nano, vi หรือ text editor อื่น และเปลี่ยนบรรทัด unix:… ให้ใช้ 127.0.0.1:9000 แทนเพื่ออัปเดต socket
หากไม่มีอะไรทำงาน ให้แน่ใจว่า php7.0-fpm หรือเวอร์ชันที่คุณใช้ กำลังรันด้วยคำสั่ง sudo systemctl restart php7.0-fpm ตามด้วยการทำซ้ำขั้นตอนข้างต้น
จำไว้ว่าในสภาพแวดล้อมส่วนใหญ่ listen entry ใน /etc/php/7.0/fpm/pool.d/www.conf และค่าใน fastcgi_pass ต้องเหมือนกัน คุณอาจลอง unix:/run/php/php7.0-fpm.sock สำหรับ configurations ใหม่กว่า หรือ 127.0.0.1:9000 สำหรับ old style ones
ABOUT THE AUTHOR

Kevin Arrows
Kevin Arrows เป็นผู้เชี่ยวชาญด้านเทคโนโลยีที่มีประสบการณ์มากกว่าหนึ่งทศวรรษ เขาถือใบรับรอง Microsoft Certified Technology Specialist (MCTS) และมีความหลงใหลในการติดตามข่าวสารเทคโนโลยีล่าสุด Kevin เขียนบทความมากมายเกี่ยวกับหัวข้อเทคโนโลยีหลากหลาย แสดงให้เห็นถึงความเชี่ยวชาญในด้านการพัฒนาซอฟต์แวร์ ความปลอดภัยไซเบอร์ และการคอมพิวติ้งบนคลาวด์ ผลงานของเขาได้รับการยอมรับและเคารพจากเพื่อนร่วมงาน และเขาได้รับการขนานนามว่าสามารถอธิบายแนวคิดทางเทคนิคที่ซับซ้อนได้อย่างชัดเจนและกระชับ