อันนี้เป็นประสบการณ์กากๆของผมที่ทำต้องจัดการให้เซิฟเวอร์ที่ใช้ DirectAdmin อยู่ สามารถรองรับจำนวนคนได้เยอะๆครับ วิธีการง่ายๆดังนี้ครับ
- ปรับ Web Server ให้ใช้ Nginx เป็น Reverse Proxy (อ้างอิงวิธีการจาก ลิงค์นี้)
- ก่อนอื่นสำหรับ คนที่ติดตั้ง DirectAdmin ไปแล้วต้องมั่นใจว่า CustomBuild ต้องมากกว่าเวอร์ชั่น 2 สามารถตรวจสอบได้โดย SSH เข้าไป แล้วใช้คำสั่งดังนี้
cd /usr/local/directadmin/custombuild ./build version
ดูว่าเลขหน้าสุดเป็นเลข 2 ไหมครับ ถ้าไม่ ให้ทำการปรับ CustomBuild เป็นเวอร์ชั่น 2 ครับ โดยสามารถทำได้ตามลิงค์นี้ครับ หรือสั่งคำสั่งด้านล่างนี้ครับ (คำเตือน Backup ทุกอย่างก่อน Update ทุกครั้ง)
cd /usr/local/directadmin mv custombuild custombuild_1.x wget -O custombuild.tar.gz http://files.directadmin.com/services/custombuild/2.0/custombuild.tar.gz tar xvzf custombuild.tar.gz cd custombuild ./build ./build all d ./build rewrite_confs
- ติดตั้ง Nginx เป็น Reversed Proxy ซึ่งตรงนี้ทาง DirectAdmin เริ่ม Support การติดตั้งอัตโนมัติแล้ว สามารถทำได้ตามคำสั่งด้านล่างนี้ครับ
cd /usr/local/directamin/custombuild ./build update ./build update_da ./build set webserver nginx_apache ./build nginx_apache ./build rewrite_confs
- เมื่อติดตั้งเสร็จแล้ว มันยังมีปัญหานิดหน่อยครับ คือตัว Apache ทีให้บริการ Web App นั้นมอง IP ของเซิฟเวอร์เองเป็น Client เนื่องจากวิ่งผ่าน Nginx จึงต้องลง mod เพิ่ม ดังนี้ครับ
cd /usr/local/src wget https://github.com/y-ken/mod_rpaf/archive/master.zip unzip master.zip cd mod_rpaf-master /bin/sed -i "s/remote_/client_/g" mod_rpaf-2.0.c make && make install
จากนั้นไปที่ /etc/httpd/conf/extra/httpd-includes.conf แล้วเพิ่มข้อความต่อไปนี้ลงล่างสุดครับ
LoadModule rpaf_module /usr/lib/apache/mod_rpaf-2.0.so <IfModule mod_rpaf-2.0.c> RPAFenable On RPAFproxy_ips 127.0.0.1 RPAFsethostname On RPAFheader X-Client-IP </IfModule>
- ก่อนอื่นสำหรับ คนที่ติดตั้ง DirectAdmin ไปแล้วต้องมั่นใจว่า CustomBuild ต้องมากกว่าเวอร์ชั่น 2 สามารถตรวจสอบได้โดย SSH เข้าไป แล้วใช้คำสั่งดังนี้
- ปรับแต่งเซิฟเวอร์เพื่อให้รองรับคนจำนวนมากได้ (จำเป็นค่อนข้างมาก ไม่งั้นอาจจะเจอ Bad Gateway หรือ Gateway Timeout บ่อย)
- ปรับแต่ง Kernel Queue เพื่อให้รับการเชื่อมต่อจำนวนมากๆได้ โดยใช้คำสั่งต่อไปนี้
sysctl -w net.core.somaxconn=100000
และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/sysctl.conf
net.core.somaxconn=100000
- ปรับแต่ง Port ที่ระบบใช้ได้ให้มากกว่าเดิม โดยใช้คำสั่งต่อไปนี้
sysctl -w net.ipv4.ip_local_port_range="10000 65535"
และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/sysctl.conf
net.ipv4.ip_local_port_range=10000 65535
- ปรับแต่งให้ปิดการเชื่อมต่อได้เร็วขึ้น เพื่อเอาไปใช้รับการเชื่อมต่อใหม่ โดยใช้คำสั่งต่อไปนี้
sysctl -w net.ipv4.tcp_tw_reuse=1
และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/sysctl.conf
net.ipv4.tcp_tw_reuse=1
- อันนี้ผมจำไม่ได้ว่ามันทำอะไรครับ แต่เห็นเซิฟเวอร์ปัจจุบันมี และคิดว่าค่อนข้างสำคัญ
sysctl -w net.ipv4.ip_nonlocal_bind=1
และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1
- ปรับแต่งเพิ่มจำนวนไฟล์สูงสุดที่ 1 โปรเซสเปิดได้ให้มากที่สุด โดยใช้คำสั่งต่อไปนี้
ulimit -n 999999
และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/security/limits.conf
* soft nofile 999999 * hard nofile 999999
- ปรับแต่ง Kernel Queue เพื่อให้รับการเชื่อมต่อจำนวนมากๆได้ โดยใช้คำสั่งต่อไปนี้
- ปรับแต่งให้ Nginx ให้บริการ Static File (ไฟล์ที่ไม่ประมวลผลเช่นภาพเป็นต้น) โดยไม่ผ่าน Apache เพราะ Nginx สามารถทำงานด้านนี้ได้ดีกว่า Apache มาก (คำเตือน วิธีนี้จะทำให้ส่วนที่ถูกซ่อนไว้ โดย Password Protected Directories ของ DirectAdmin อาจจะทำให้ข้อมูลที่ถูกซ่อนบางส่วนหลุดไปได้โดยไม่ถามรหัสผ่าน แต่ผมว่าในเคสทั่วไปไม่ค่อยมีคนใช้) โดยสั่งคำสั่งดังต่อไปนี้
cd /usr/local/directadmin/data/templates/custom wget "https://www.ishare.in.th/wp-content/uploads/2015/02/conf.zip" unzip conf.zip rm -f conf.zip cd /usr/local/directadmin/custombuild ./build rewrite_confs service nginx reload
เพียงเท่านี้ Nginx ก็จะให้บริการ Static File ส่วนมากให้ทันที (ผมอาจจะ list ไม่หมดเพราะผมก็ไปคัดลอกจากที่อื่นมาครับ)
เพียงเท่านี้ก็คิดว่าเซิฟเวอร์ปัจจุบันของท่านก็น่าจะรับโหลดเพิ่มขึ้นได้อีกเยอะครับ หากยังไม่สามารถรองรับได้อีก อาจจะต้องปรับ nginx ให้ cache หน้าที่ประมวลผลไว้สักหน้าละ 10 – 60 วิ แล้วแต่กรณีไป แต่พอดีที่ๆผมทำงาน Implement ระบบ Cache ด้านในไว้ เลยไม่มีปัญหามากครับ