用途方面簡單舉幾個例子
- Forward proxy
- 用戶套用Hinet的proxy,抓國外的東西會比較快,因為proxy上面已經cache一份。
- 公司或宿舍網路禁止對外存取facebook或上msn,proxy上有強大的parser可以check/replace特定字眼。
- Reverse proxy
- 在多台web server前架一台proxy做分流可以大大提高capacity與安全性,推薦Nginx。
- 搭配virtual host,可將不同domain name的request導向不同的server。
最近剛好有使用forward proxy的需求,也就是用戶透過proxy連到public網路,如果遇到連接對向很慢或不存在的時候,此時proxy的connection就會被占住,直到timeout為止。剛開始是使用apache,apache prefork或worker模式下,其connection的數量是有限的(再設定檔內指定),若遇到上述的狀況,整體服務狀況就會變得很差。
Proxy的選擇
- Apache + module proxy: 很吃記憶體,polling的做法不合用
- Tinyproxy: 較apache省記憶體,但運作方式也是一個thread一個connection,response time比apache還差
- Lighttpd: 不支援forward proxy,底層為epoll
- Nginx: 不支援forward proxy,底層為epoll
- Squid: 支援forward proxy,底層採用epoll (最後的選擇)
Squid的filter真的很強大,過濾ip, port, mac都沒有問題。
效能方面,我讓他hang了20,000條connection,new request上去反應並沒有被影響。
設定方面可以參考
沒有留言:
張貼留言