เรื่องนี้อาจจะเก่าสำหรับหลายๆคน แต่สำหรับผมแล้วเป็นเรื่องใหม่ เพราะเมื่อสองสามวันมานี้เกิดคำถามกับตัวเองว่า ถ้าเราต้องการใช้งาน proxy เฉพาะบางเวป และเวปที่อื่นๆให้ออกตรงโดยไม่ต้องผ่าน proxy สามารถทำได้ไหม ผมก็เลยค้นๆดูปรากฏว่าพบซิธีทำ proxy autoconfig ซึ่งมันดูน่าสนใจ พอดูๆแล้วปรากฏว่าตอบโจทย์ที่ต้องการพอดี
ไม่ใช่แค่ตอบสนองความต้องการของผม แต่เราสามารถนำวิธีการนี้ไปใช้ร่วมกับองค์กรณ์เพื่อกำหนดให้ user ต่างๆ สามารถใช้งาน proxy ตัวไหนได้โดยไม่จำเป้นต้องไปเดิน set ให้เมื่อยขา เพราะว่า วิธีการนี้สามารถนำไปใช้งานร่วมกับ DHCP หรือ Active directory อีกด้วย
วิธีการไม่มีอะไรยากมากเหมือนเขียนโปรแกรม และมีฟังค์ชั้นที่ใช้งานไม่มากนัก โดยโครงสร้างเริ่มต้นเป็นดังนี้
function FindProxyForURL(url, host) { ... }
เมื่อเรารู้โครงสร้างเริ่มต้นแล้ว ก้มารู้จักกับ function สักตัวสองตัวที่คิดว่าจำเป็นสำหรับการสร้างไฟล์ proxy client autoconfig
- shExpMatch(str หรือ url หรือ host, shexp)
- isInNet(host, pattern, mask)
str คือ string ที่เอาไว้ compare
url และ host จะรับค่ามาจาก funtion FindProxyForURL
shexp คือ expreesion นำมา compare โดยสามารถใช้ wildcard ได้ด้วย
จะให้ค่าเป็น true ในกรณีที่ค่าทั้งสอง match กัน
ตัวอย่าง เช่น
shExpMatch(“http://w3.ezylinux.com/website1/index.html”, “*site1*”) จะให้ค่าเป็น true
shExpMatch(host, “*.ezylinux.com”) เมื่อมีการ request เพื่อเวป ezylinux.com จะให้ค่าเป็น true
host จะรับค่ามาจาก funtion FindProxyForURL โดยเมื่อรับมาแล้วจะใช้ DNS เพื่อ resolve หา IP อีกที
pattern คือ IP Address
mask คือ subnet mask
ตัวอย่าง เช่น
isInNet(host, “198.95.249.79″, “255.255.255.255″) ให้ค่า true ถ้าเครื่องเป็น 198.95.249.79
isInNet(host, “198.95.0.0″, “255.255.0.0″) ให้ค่า true ถ้าเครื่องอยู่ในวง 198.95.0.0
การ return ค่า สามารถทำได้ 3 อย่างด้วยกันดังนี้
- DIRECT ให้ไม่ต้องผ่าน proxy
- PROXY host:port ให้ใช้ proxy ที่ host และ port ที่ระบุไว้
- SOCKS host:port ให้ใช้ proxy ที่ host และ port ที่ระบุไว้
ตัวอย่างการใช้งาน (proxy.pac)
function FindProxyForURL(url, host) { if (isInNet(host, "192.168.0.0", "255.255.0.0")) { //อยู่ในวง 192.168.0.0 หรือไม่ return "DIRECT"; } else { if (shExpMatch(host, "*.ezylinux.com")) // จะเข้าเวป ezylinux.com หรือไม่ return "DIRECT" ; else if (shExpMatch(url, "http:*")) // เข้าเวปด้วย http หรือ port 80 return "PROXY webcache.ezylinux.com:3128" ; else if (shExpMatch(url, "https:*")) //เข้าเวปด้วย https หรือ port 443 return "PROXY webcache.ezylinux.com:3128" ; else if (shExpMatch(url, "ftp:*")) // เข้าใช้งาน ftp หรือ port 21 return "PROXY webcache.ezylinux.com:3128" ; return "DIRECT"; } }
เมื่อได้ไฟล์ config แล้วเราสามารถวางไว้ได้ทั้ง เครื่องตัวเอง หรือ วางไว้ที่เครื่อง server (web server) โดย
- กรณีที่วางไว้ที่เครื่องตัวเองให้ใช้ file:///c:/users/tum/proxy.pac
- กรณีที่วางไว้ที่ server ให้ใช้ http://www.ezylinux.com/proxy.pac แล้วอย่าลืม AddType ตามตัวอย่างด้านล่าง
AddType application/x-ns-proxy-autoconfig .pac
ซึ่งจะนำไปใส่ไว้ที่ URL ตั้งค่าพร๊อกซี่อัตโนมัติ ในส่วนของการ set ค่า proxy สำหรับ firefox และ นำไปใส่ไว้ที่ Use automatic configuration script ในส่วนของการ set ค่า proxy สำหรับ IE ดังตัวอย่าง


Related posts:
- Transparent proxy in squid 2.6 การ config transparent proxy ตั้งแต่ squid version 2.6...
- Setup a transparent proxy over ssl https with Squid การนำ Squid มาทำ transparent proxy ส่วนใหญ่จะใน website ต่างๆจะบอกแต่วิธีทำ...
- Squid fatal error: Could not determine fully qualified hostname ถ้าหากคุณเพิ่งติดตั้งเครื่องสำหรับทำ proxy server แล้วเจอ error ตามตัวอย่างด้านล่าง เมื่อทำการ start...
- Test the connectivity to server using netcat เมื่อต้องการทดสอบ connection เราสามารถที่จะใช้โปรแกรม netcat เพื่อทำการทดสอบได้ ขั้นตอนการทดสอบสามารถทำได้ดังนี้ ถ้าไม่มีโปรแกรม netcat...
- View the commented lines of text in a config file เราสามารถที่จะใช้คำสั่ง grep ในการช่วยดูไฟล์คอนฟิกในส่วนของข้อความที่มีที่ขึ้นต้นด้วยตัวอักษรต่างๆ เพื่อใช้ในการดูคอมเม้นต์ของไฟล์คอนฟิกนั้นๆว่าได้ทำการคอมเม้นต์อะไรบ้าง จะได้สะดวกในการค้นหาและตรวจสอบค่าคอนฟิกของเรา รูปแบบคำสั่ง เช่นต้องการดูคอมเม้นต์ของไฟล์คอนฟิกที่มีลักษณะการคอมเม้นต์ที่ใช้ #...


June 24th, 2010
Tum.
Posted in
Tags: 