Blogs with tag [Nginx]
การใช้ Nginx กับ Django
(กำลัง update อยู่ เข้ามา refresh เรื่อยๆ นะ)
Nginx อ่านว่า เอ็นจิ้นเอ็กซ์ เรามักเห็นเว็บไซต์ดังๆ เอามาใช้เป็น Reverse Proxy ซึ่งความจริงแล้ว Nginx ก็ยังทำหน้าที่เป็น Web Server ได้ดีอีกด้วย โดยเฉพาะในการบริการ static content ทั้งหลาย เช่น รูปภาพ หรือ ไฟล์วีดีโอใหญ่ๆ
Nginx จัดว่าเป็น Web Server จำพวกเดียวกับ Lighttpd ซึ่งทำงานในแบบ non-blocking IO เหมือนกัน (ต่างจาก Apache ที่ทำงานในแบบ child process และ multi-thread) การทำงานแบบ non-blocking IO นี้ทำให้มี memory footprint น้อยมาก (และมักจะคงที่ ไม่เพิ่มขี้นจากจำนวน request ที่มากขึ้น) มีการตอบสนอง request ที่เร็ว รวมถึงรองรับปริมาณ connection ได้มากต่อช่วงเวลา ซึ่งเหมาะสำหรับการบริการ static file และการทำ reverse proxy
แม้ว่าในปัจจุบันเราจะเคยชินกับการใช้ Apache กับ module จำพวก mod_* ต่างๆ เพื่อใช้แสดงผล dynamic content เช่น mod_php, mod_perl หรือ mod_python ซึ่งเป็นการผนวกตัวแปลภาษา php, perl และ python เข้าเป็นส่วนหนึ่งของ Apache ซึ่งตามทฤษฎีแล้ว จะทำให้ความเร็วในการทำงานสูงสุด แต่เราต้องไม่ลืมว่าการทำเช่นนั้นเป็นการทำให้ memory footprint ของ Apache ใหญ่ขึ้น และหากเกิดความผิดพลาดอะไรขึ้นกับการทำงานของ mod เหล่านั้น ก็จะทำให้ Apache ทั้งก้อนตายไปด้วย
Django เมื่อใช้ร่วมกับ flup (ต้องลงในระบบโดย admin) จะสามารถ run ใน mode FastCGI ได้ โดยการใช้ FastCGI ก็คือการที่ให้ Django ทำงานอยู่ใน thread ของมันเอง เพียงแต่เปิด interface ออกมายัง port หรือทาง unix socket ที่กำหนดเองได้ ดังนั้นจึงสามารถ run Django ด้วย user account ที่ต่างจากตัว web server ได้ และ user จะสามารถ start/stop Django ได้เองตลอดเวลา (ตราบเท่าที่ user คนนั้นยังมีสิทธิ login เข้ามาในระบบ)
ดูตัวอย่างการ run Django แบบ FastCGI ได้ที่นี่
