ไม่ว่าจะเพิ่มความเร็วอินเตอร์เน็ตเป็นเท่าไร ดูเหมือนเน็ตก็ยังช้าอยู่เหมือนเดิม ในบทความนี้จะแนะนำอีกวิธีการหนึ่งเพื่อจำกัดขนาดไฟล์ที่สามารถดาวน์โหลดได้ผ่าน squid proxy server โดยสามารถคอนฟิกได้ทั้งแบบจำกัดทั้งหมดทุกคน หรือสามารถแบ่งกลุ่มตามระดับได้
การคอนฟิกในที่นี้เป็นการจำกัดขนาดไฟล์การดาวน์โหลดต่อครั้ง เพื่อป้องกันไม่ให้ผู้ใช้งานดาวน์โหลดไฟล์ขนาดใหญ่ เช่นไฟล์เพลง หนัง ได้
เว็บเซิร์ฟเวอร์ระบบทดสอบ
สำหรับการทดสอบ ในที่นี้เราจะสร้างไฟล์ขนาดต่างๆ บนเว็บเซิร์ฟเวอร์ เพื่อดูว่าการคอนฟิกของ squid มีผลอย่างไร
[root@web-server test]# cat file-download.html
<a href="file-1M.bin">file-1M.bin</a><br>
<a href="file-2M.bin">file-2M.bin</a><br>
<a href="file-3M.bin">file-3M.bin</a><br>
<a href="file-4M.bin">file-4M.bin</a><br>
[root@web-server test]# dd if=/dev/zero of=file-1M.bin bs=1000000 count=1
[root@web-server test]# dd if=/dev/zero of=file-2M.bin bs=1000000 count=2
[root@web-server test]# dd if=/dev/zero of=file-3M.bin bs=1000000 count=3
[root@web-server test]# dd if=/dev/zero of=file-4M.bin bs=1000000 count=4
[root@web-server test]# ls -l
total 9780
-rw-r--r-- 1 root root 1000000 2009-03-14 12:28 file-1M.bin
-rw-r--r-- 1 root root 2000000 2009-03-14 12:28 file-2M.bin
-rw-r--r-- 1 root root 3000000 2009-03-14 12:28 file-3M.bin
-rw-r--r-- 1 root root 4000000 2009-03-14 12:28 file-4M.bin
-rw-r--r-- 1 root root 168 2009-03-14 12:26 file-download.html
คอนฟิก ip และ port ของ squid proxy ลงไปใน browser แล้วทดลองเรียกไปที่ web-server (ip: 192.168.1.1) ไฟล์ file-download.html
คอนฟิก reply_body_max_size
คอนฟิกของ squid ที่ใช้สำหรับการจำกัดขนาดของไฟล์ดาวน์โหลดคือ reply_body_max_size รูปแบบการคอนฟิกคือ
reply_body_max_size SIZE UNITS [acl ...]
คำอธิบาย
- SIZE UNITS คือขนาดของไฟล์ที่ต้องการจำกัด
- acl เป็นออปชั่น ถ้าไม่ใส่ จะเป็นการจำกัดขนาดไฟล์ทุกคนที่ใช้ผ่าน proxy แต่ถ้าต้องการระบุเป็นกลุ่ม เราสามารถสร้าง acl แล้วนำชื่อ acl นั้นมาต่อท้ายบรรทัดนนี้ได้
- ดีฟอลต์คอนฟิกที่ติดตั้งมา ไม่มีการจำกัด
หมายเหตุ รูปแบบการคอนฟิกค่า reply_body_max_size ของเวอร์ชั่น 3.0 จะแตกต่างจากเวอร์ชั่นก่อนหน้า เช่น 2.6 คือตัดคำว่า allow/deny ออกไป
ตัวอย่างคอนฟิกการจำกัดขนาดไฟล์ดาวน์โหลดได้สูงสุด 2 MBytes สำหรับทุกคน
[root@squid ~]# cat /etc/squid/squid.conf
...
reply_body_max_size 2 MB
...
หลังจากเปลี่ยนคอนฟิก squid.conf แล้ว ต้องรีโหลดเซอร์วิสของ squid ด้วย เพื่อให้คอนฟิกใหม่มีผล
[root@squid ~]# service squid reload
ทดลองใช้ browser กดดาวน์โหลดไฟล์ต่างๆ บนหน้า file-download.html ของเครื่องเว็บเซิร์ฟเวอร์
ข้อความเตือนว่าไม่สามารถดาวน์โหลดไฟล์ได้ เนื่องจากขนาดไฟล์มีขนาดใหญ่เกินไป “The request or reply is too large.” (มากกว่า reply_body_max_size)
ตัวอย่างข้อความเตือน เมื่อพยายามดาวน์โหลดไฟล์ขนาด 3MB
แบ่งขนาดไฟล์ดาวน์โหลดเป็นกลุ่ม
ถ้าเราต้องการยกเว้นสำหรับบางกลุ่มเช่น บางคนจำเป็นต้องดาวน์โหลดไฟล์ขนาดใหญ่ๆ อยู่เสมอ เราสามารถสร้าง acl ขึ้นมาเพื่อระบุการแบ่งกลุ่ม แล้วคอนฟิกเข้ากับ reply_body_max_size เพื่อจำกัดขนาดไฟล์แยกเป็นกลุ่มๆ ตาม acl ได้
เช่น ต้องการให้เครื่องไคลเอนต์ที่มี ip เป็น 192.168.2.0/24 (net_group1) สามารถดาวน์โหลดไฟล์ขนาดสูงสุดได้ถึง 3MB แต่ถ้าเป็นเครื่องไคลเอนต์ที่มี ip 192.168.3.0/24 (net_group2) ดาวน์โหลดไฟล์ขนาดสูงสุดได้แค่ 1 MB สามารถคอนฟิกได้ดังนี้
[root@squid ~]# cat /etc/squid/squid.conf
...
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#-------------------------------------------------------------------------------
acl net_group1 src 192.168.2.0/24
acl net_group2 src 192.168.3.0/24
reply_body_max_size 3 MB net_group1
reply_body_max_size 1 MB net_group2
#-------------------------------------------
...
หลังจากเปลี่ยนคอนฟิก squid.conf แล้ว ต้องรีโหลดเซอร์วิสของ squid ด้วย เพื่อให้คอนฟิกใหม่มีผล
[root@squid ~]# service squid reload
ทดลองใช้ browser จากเครื่อง ip ต่างๆ แล้วกดดาวน์โหลดไฟล์ต่างๆ บนหน้า file-download.html ของเครื่องเว็บเซิร์ฟเวอร์