มีปัญหาเรื่อง Apache มาพอสมควรเนื่องจากมีเว็บหนึ่งใน Virtual Host มี traffic เยอะมากจนทำให้เว็บอื่นๆ ที่เป็น Virtual Host เหมือนกันเข้าไม่ได้ ได้ลองพยายามปรับแต่งทั้งโปรแกรมและส่วนอื่นๆ เช่น PHP, MySQL, CMS จนหมดแล้ว สุดท้ายต้องหาวิธีจัดการ bandwidth ของ Apache ให้ได้ ผมมีวิธีการง่ายๆ มานำเสนอ ใช้ mod_cband ครับ :)
modcband มักถูกใช้ใน hosting เนื่องจากผู้ให้บริการต้องการจำกัด bandwidth ของเว็บนั้นๆ ต่อเดือน และจำกัดความเร็วในการโหลดหน้าเว็บนั้นๆ เพื่อรักษา bandwidth โดยรวมเพื่อให้เว็บอื่นๆ เข้าใช้งานได้ปกติ ซึ่งการจำกัด bandwidth ลักษณะนี้ได้ผลดีมากเพราะสามารถกำหนดได้เป็นรายเว็บไซต์ เพื่อสร้างเงื่อนไขทางด้านราคาและการทำการตลาด น่าจะพอเห็นภาพกันบ้างแล้วทีนี้เรามาจัดการ Apache กัน อ้อเกือบลืมผมอ้างอิงกับ Ubuntu 10.04 LTS ครับ
เตรียมไลบรารีสำหรับ compile เจ้า modcband กันก่อน
apt-get install apache2-prefork-dev
จากนั้นดาวน์โหลด mod_cband ดังนี้
cd /tmp
wget http://cband.linux.pl/download/
tar xzvf mod-cband-0.9.7.5.tgz
cd mod-cband-0.9.7.5
./configure
make
make install
หลังจาก make install แล้ว mod_cband จะติดตั้งตัวเองให้อัตโนมัติ ให้คุณ restart Apache สักรอบแล้วสังเกตที่ error log จะพบว่า ยังไม่ได้ตั้งค่าใน VirtualHost มาดู directive ที่ต้องตั้งค่ากันก่อน
ความเร็วในการรับส่งข้อมูล (transfer speed) :
- kbps: 1024 bits per second
- Mbps: 1024*1024 bits per second
- Gbps: 102410241024 bits per second
- ค่าปริยายคือ kbps.
โควต้าในการรับส่งข้อมูล (transfer quotas) :
- K: 1000 bytes
- M: 1000*1000 bytes
- G: 100010001000 bytes
- Ki: 1024 bytes
- Mi: 1024*1024 bytes
- Gi: 102410241024 bytes
- ค่าปริยายคือ K.
ระยะเวลา :
- S: วินาที
- M: นาที
- H: ชั่วโมง
- D: วัน
- W: สัปดาห์
- ค่าปริยายคือ S.
เพิ่ม directive เพื่อเพิ่มคุณสมบัติเรื่องการกำหนดระยะเวลาที่ /etc/apache2/apache2.conf ดังนี้
CBandScoreFlushPeriod 1
CBandRandomPulse On
เพิ่ม scoreboard ให้กับ VirtualHost ดังนี้
mkdir /var/www/scoreboard
chown www-data:www-data /var/www/scoreboard/
ทีนี้มาลองดูตัวอย่างการตั้งค่าใน VirtualHost กันครับ
<VirtualHost 1.2.3.4>
ServerName www.example.com
ServerAdmin webmaster@example.com
DocumentRoot /var/www
CBandSpeed 1024 10 30
CBandRemoteSpeed 20kb/s 3 3
</VirtualHost>
จากตัวอย่างข้างต้น Directive CBandSpeed จำกัดความเร็วของ Apache ทั้งหมดของเว็บ www.example.com มีความเร็วที่ 1024Kbps เปิดให้เชื่อมต่อ 10 request ต่อวินาที และเปิดช่องเชื่อมต่อ 30 Connection ส่วน CBandRemoteSpeed เหมือนกับ CBandSpeed มากำหนดในส่วนของผู้ใช้แต่ละคน
มาดูอีกตัวอย่างนึง
<VirtualHost 1.2.3.4>
ServerName www.example.com
ServerAdmin webmaster@example.com
DocumentRoot /var/www
CBandLimit 100M
CBandExceededSpeed 128 5 15
CBandScoreboard /var/www/scoreboard
CBandPeriod 4W
</VirtualHost>
จาก config ข้างต้น CBandLimit กำหนด traffic อยู่ที่ 1000MB ต่อเดือน โดยให้ download speed มีความเร็วอยู่ที่ 128kbps 5 requests/sec และเปิดช่องเชื่อมต่อ 15 connection
เมื่อตั้งค่าได้ตามใจชอบแล้วสั่ง restart Apache เท่านี้ก็จัดการ bandwidth ของ VirtualHost ได้แล้ว :)