สำหรับ centos / fedora / redhat เท่านั้นครับ !!!
คือ plesk หลังจากติดตั้งเสร็จเนี่ย มันแทบจะใช้ค่า default ของ os มาเลย ถ้าใช้ๆ ไปจะเจอปัญหาประหลาดๆ แบบนี้ครับ
- ทำไมเว็บ (ส่วน php) ทำงานช้าจัง
- upload ไฟล์ใหญ่ๆ ผ่านเว็บไม่ได้
- ทำไมเจอปัญหา invalid response from backend อะไรซักอย่าง
- ทำไมเพิ่มโดเมนแล้วเข้าไม่ได้
- ทำไมเปลี่ยน folder ที่เก็บไฟล์ของ domain แล้วเจอ 404 not found
- ทำไมเว็บขึ้น 502 bad gateway รัวๆ
ความจริงจะเรียกว่าความผิดของ plesk ที่ไม่ยอมปรับให้ก็ได้นะ (ฮา) แต่ปกติเราก็จูนกันไม่เหมือนกันใช่มั้ยครับ นี่ก็เหตุผลเดียวกัน (แถ 555) เพราะงั้นมาดูกันดีกว่าว่าต้องปรับตรงไหนบ้าง
อันแรกสุด การตั้งค่า fcgid ของ httpd ครับ กรณีที่เลือกการทำงานของ php เป็น fastcgi อาจจะเจอปัญหาข้อแรกกับข้อสองได้ครับ
ไฟล์ config ของ fcgid อยู่ที่ /etc/httpd/conf.d/fcgid.conf ครับ
ค่าที่ควรปรับ
- FcgidMaxProcesses << จำนวน process ของ fastcgi “ทั้งหมด” ที่รันได้ “พร้อมกัน” ควรตั้งไว้ขั้นต่ำ 50 ครับ แต่ไม่ควรเกิน 200
- FcgidMaxProcessesPerClass << จำนวน process ของ fastcgi “ต่อเว็บ” ที่รัน “พร้อมกัน” ได้ อันนี้ไม่ควรเกิน 8 ครับ เว็บค้างจนล่มก็ล่มเป็นเว็บๆ ไปก็ปรับตรงนี้แหละครับ
- FcgidMinProcessesPerClass << ตั้ง 0 ไปเลยฮะ (จำได้ว่า 0 อยู่แล้ว)
- MaxRequestLen << อันนี้คือขนาดของการ post สูงสุด ตั้งให้สูงๆ ไปเลยครับ ปกติผมตั้ง 134217728 (128MB)
- FcgidOutputBufferSize << ตั้ง 0 ไปเลยครับ เวลา php output มาปุ๊ปจะได้ส่งให้ client เลย
แล้วอย่าลืมมาปรับ max clients ของ httpd ที่ config หลักด้วยนะครับ ที่ /etc/httpd/conf/httpd.conf เนื่องด้วยจริงๆ แล้ว nginx จะทำหน้าที่ serve static file ทั้งหมดให้อัตโนมัติ apache เลยไม่จำเป็นต้องทำงานหนักมาก ก็ปรับค่าประมาณนี้ครับ
- ServerLimit 128
- MaxClients 128
เวลาเว็บค้างจะได้ไม่ลาก server ร่วงไปด้วย และเท่าที่ใช้มาก็ยังไม่เจอปัญหาอะไรครับ
มาที่ nginx บ้าง
อย่างแรกที่จะเจอปัญหาคือ… invalid response from backend อะไรซักอย่างครับ เป็นกรณีใช้พวก framework หรือ cms ที่ตอบ cookie ใหญ่ๆ ออกมา โดนประจำ T_T จนตอนหลังต้องใส่เป็น checklist ข้อแรกของการติดตั้งเลย มันเป็นปัญหาเรื่องของ buffer ที่ได้รับจาก backend ครับ มันน้อยไปทำให้ header ที่ควรจะได้รับทีเดียวหมด มันมาหลายรอบทำให้ nginx parse header ไม่ครบเลย error
วิธีแก้คือ “สร้างไฟล์” /etc/nginx/conf.d/buffers.conf ขึ้นมาครับ แล้วใส่ตามนี้เลย
proxy_buffer_size 512k;proxy_buffers 4 512k;
proxy_busy_buffers_size 512k;
fastcgi_buffer_size 512k;
fastcgi_buffers 4 512k;
fastcgi_busy_buffers_size 512k;
ส่วนอันที่ 4-5 เป็นอีกปัญหานึงครับ คือบน linux จะมีการจำกัดว่า 1 process จะเปิดอ่าน/เขียนไฟล์ได้พร้อมกันไม่เกิน X file (ปกติ 1024) ซึ่ง… domain นึงเนี่ย มันต้องมีอย่างน้อยๆ ก็ 3 ไฟล์คือ access log , access ssl log , error log ไม่นับ connection ที่เข้ามาอีก ซึ่งถ้ามันเต็ม หรือเกือบๆ เต็ม จะทำให้ nginx ไม่สามารถ reload config ได้
มันก็จะใช้ config เก่าไปเรื่อยๆ จนกว่าจะ restart (แล้วก็บึ้ม เพราะเปิดไฟล์เกิน)
วิธีแก้คือ เปิดไฟล์ /etc/sysconfig/nginx แล้วเพิ่มบรรทัดนี้ต่อท้ายเข้าไปครับ
NGINX_ULIMIT=“-n 16384”
แล้วสั่ง restart nginx ทีนึง… จบ สำหรับ nginx นะ ส่วน apache เข้าไปใน control panel ครับ แล้วไปที่เมนู Tools & Settings > Apache Web Server แล้วติ๊กตรง Piped Log ครับ (คำแนะนำตัวเทาๆ เลยฮะ)
ข้อสุดท้าย… อันนี้แอบด่า plesk ในใจว่าทำไมมันไม่ตั้งมาให้ตั้งแต่แรกวะ… (ฮา) คืองี้ครับ เคยเจอบางจังหวะมีการ add domain รัวๆ … แล้วอี plesk เนี่ย add domain ทีนึงมันก็ restart apache ทีนึง สนุกมาก (จริงๆ directadmin ก็เป็นนะ แต่ da มัน restart ด้วย cron อย่างมากมันก็นาทีละครั้ง)
ก็เลยมี option ใหม่ที่เพิ่งเพิ่มมาใน version 12 นี้เอง มันคือการทำ gracefully restart (reload แบบ clear config ใหม่และ pause การทำงานของระบบชั่วคราว) ซึ่งจะทำให้ port 80 รับ connection ได้ตลอดเวลา (แต่รอจน apache พร้อมทำงานนิดนึง) เว็บก็แค่จะอืดไปชั่วคราว ไม่เกิน 10-20 วินาทีก็ลื่นเป็นปกติไม่ขึ้น 502 มาให้น่ารำคาญใจ
วิธีการครับ เข้า shell พิมพ์คำสั่งดังนี้
echo "INSERT INTO misc VALUES ('restart_apache_gracefully', 'true');" | mysql -u admin -p$(cat /etc/psa/.psa.shadow ) psa
จบ…
ปล. แถมอีก 1 คำสั่ง สำหรับท่านที่ไม่อยากเจอลูกค้าบ่นว่า dns update ช้า รันไอ้ที่ตั้งแต่ตอนติดตั้ง plesk เสร็จหมาดๆ ครับ
/usr/local/psa/bin/server_dns --update-soa -soa-ttl 5M -soa-refresh 4H -soa-retry 2H -soa-expire 2W -soa-minimum 2D -soa-serial-format yyyymmddnn