一、代理服務器應用場景分析
想當年大學時候宿舍控制網速,苦了我們這幫魔獸黨,一到晚上工會活動我們就得和全校上萬名學生搶網速,作為坦克的我總是因為網速問題導致團滅,咱也是有自尊的人,一怒之下花300元辦了個游戲加速器,果然順暢了不少,宿舍朋友看我辦代理,他們也買,總之第一次接觸代理就是在大學時代,如今做技術了才開始深入探究這東西了,那么我們企業應用的代理不簡簡單單是加快網速的作用,還有很多功能,等我慢慢給你們說……
代理服務器可以代替客戶端向網站發出數據的請求,然后它會做一個緩存將得到的靜態數據保存在代理服務器的緩存,緩存在它本地里面,等下一次有用戶去進行請求的時候,代理服務器就會把這些數據直接交還給客戶端,加快訪問速度,企業要求的提升網速目的就實現了,常用的代理服務器軟件有Squid、Nginx
我們知道iptables 防火牆可以對局域網起到良好的保護作用,並提供了SNAT和DNAT地址轉換策略,為共享接入互聯網提供了方便,但是iptables不容易實現企業對員工的上網訪問實施非法站點屏蔽,限制文件下載等管理和提升企業上網速度;我們知道它是包過濾型防火牆,工作在網絡層和傳輸層,而代理服務器吶屬於工作在應用層,相當於一個應用層的防火牆。
Squid里面有ACL訪問控制列表,可以自行定義哪些企業人員可以在什么時間段上網等功能,以及可以達到上網訪問的數據的類別,比如我們只允許某些員工上網查資料,而不允許登錄qq等操作,都可以通過Squid來精確的控制。但是有些應用程序不允許使用代理,這也算是它的一個弊端把,另外注意代理服務器不是一個網關服務器,不需要開路由轉發功能,因此安全性要比iptabls好
二、代理的分類
根據實際應用方式分類:傳統代理、透明代理;下面還會介紹一種反向代理,我們可以簡單地這樣理解,普通代理是內網訪問外網時配置的,反向代理就是外網需要訪問我們局域網服務器配置的
傳統代理多用於Internet環境,比如說,為我們qq程序使用代理,可以隱藏本機真實的IP,為下載工具使用代理,可以避免我們服務器並發連接的限制,透明代理吶,多用於局域網環境,比如說咱們Linux網關中,啟用透明代理,局域網主機就不用進行設置了,適合內部員工上網
1、傳統代理

普通的代理服務,須在客戶機的瀏覽器、QQ聊天工具、下載軟件等程序中手動設置代理服務器的地址和端口、由代理服務器代替客戶機去請求數據
例如訪問某些國外網站,可以通過一台Internet上的代理服務器
2、透明代理

客戶機不需要指定代理服務器的地址和端口,而是通過默認路由、防火牆策略將Web訪問重定向給代理服務器處理
3、反向代理

接受因特網的連接請求,並將請求轉發給內網的服務器,獲得數據后返回給因特網的客戶端,類似於用iptables的DNAT策略發布服務器
三、代理的工作機制

當我們客戶機對網站進行訪問請求時,代理服務器首先會查看自己的緩存里有沒有客戶機要訪問的靜態數據,同時訪問網站,比對靜態數據的一致性,如有不同,則更新靜態數據,隨網站提供的動態數據一起,把動靜態數據一起交給客戶機。
以上過程我再拿一個例子解釋一下,我們大家都在火車票代購點買過票吧,當我們需要買票時,我們先到達代購點,OK,這時就可以說我們(客戶機)與代購點(代理服務器)聯通了,另外,代購點的電腦(代理服務器)也肯定要與火車站售票網站(www.163.com)聯通吧,Ok,我們發出買票請求,北京到南京的T888次列車,代購點肯定要查一下電腦,看一看此時我要買的火車票在此時還有沒有吧,這就相當於代理服務器首先會查看自己的緩存里有沒有客戶機要訪問的靜態數據這一步,查完電腦,證明還有的話直接打印此次列車,就相當於把數據還給我們,如果查完沒有票了,就會同步其他能到南京的列車,打印別的車次的火車票給我們,好了,這就是它整個的工作機制。
四、Squid安裝與初始化
1 ~]#tar zxvf squid-3.4.6.tar.gz -C /usr/src/ 2 ~]#cd /usr/src/squid-3.4.6/ 3 ~]#./configure --prefix=/usr/local/squid --sysconfdir=/etc/ --enable-arp-acl --enable-linux-netfilter --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll --enable-gnuregex 4 ~]#make && make install 5 ~]#ln -s /usr/local/squid/sbin/squid /usr/local/sbin/ 6 ~]#useradd -M -s /sbin/nologin squid (這個用戶主要用來設置初始化緩存目錄的) 7 ~]#chown -R squid:squid /usr/local/squid/var 8 ~]#vim /etc/squid.conf 9 其中可見 10 http_port 3128(監聽端口為3128,另外通過icp_port項也能配置監聽端口) 11 添加運行用戶和組還有提示用配置項 12 cache_effective_user squid 13 cache_effective_group squid 14 visible_hostname 192.168.1.1(當squid出現問題時,可提示192.168.1.1) 15 ~]#squid -k parse (檢查配置文件) 16 ~]#squid -z (初始化目錄,清除緩存) 17 ~]#squid (運行服務) 18 ~]#netstat -anpt | grep squid 19 tcp 0 0 :::3128 :::* LISTEN 6187/(squid-1) 20 21 擴展命令如下: 22 ~]#killall -9 squid (關閉squid) 23 ~]#squid -k reconfigure (重新加載,但不中斷服務,配置更改后,建議用這種方式加載)
注:我寫了一個腳本來控制squid服務,大家可以參考我SHELL腳本分類里的文章http://www.cnblogs.com/mangood/p/6033044.html,把腳本放在/etc/init.d/squid下添加為系統服務,然后加執行權限chmod +x /etc/init.d/squid,再加為系統默認啟動服務chkconfig --add squid並chkconfig squid on
