squid做爲一款應用層的代理服務軟件,它主要提供了緩存加速、應用層過濾的功能。linux
squid代理服務器的工做機制:
web
當咱們客戶機經過squid代理去訪問web頁面時,指定的代理服務器會先檢查本身的緩存,如果緩存中有咱們客戶機須要的頁面,那麼squid服務器將直接把緩存中的頁面內容返回給客戶機,若是緩存中沒有客戶端請求的頁面,那麼squid代理服務器就會向internet發送訪問請求,得到返回的web頁面後,將網頁的數據保存到緩存中併發送給客戶機。正則表達式
因爲客戶機的web訪問請求其實是squid代理服務器來代替完成的,因此隱藏了用戶的真實IP地址,從而起到必定的保護做用。
另外一方面,squid也能夠針對要訪問的目標、客戶機的地址、訪問的時間段進行過濾控制。vim
根據實現的方式不一樣,基本能夠分爲傳統代理和透明代理兩種方式:瀏覽器
傳統代理:也就是普通的代理服務,須要咱們客戶端在瀏覽器、聊天工具等一些程序中設置代理服務器的地址和端口,而後才能使用代理來訪問網絡,這種方式相比較而言比較麻煩,由於客戶機還需手動指定代理服務器,因此通常用於Internet環境。緩存
透明代理:與傳統代理實現的功能是同樣的,區別在於客戶機不須要手動指定代理服務器的地址和端口,而是經過默認路由、防火牆策略將web訪問重定向,實際上仍然交給代理服務器來處理,重定向的過程徹底是由squid服務器進行的,因此對於客戶機來講,甚至不知道本身使用了squid代理服務,所以呢,咱們稱之爲透明模式。
透明代理多用於局域網環境,如在Linux網關中啓用透明代理後,局域網主機無須進行額外設置就能享受更好的上網速度。bash
就此打住,不說廢話,開始安裝及優化squid服務器:服務器
來吧,先來搭建一個傳統代理:網絡
所需設備:併發
一、Windows客戶端一個;
二、squid服務器一個,具備兩塊網卡;
三、web服務器一個;
所需squid源碼包:
連接:https://pan.baidu.com/s/1RoWEOxLH1yFHSL07pralYw
提取碼:sdnx
或者直接去官網下載:
http://www.squid-cache.org/Versions/
網絡環境以下:
一、開始實施安裝:
[root@localhost src]# tar zxf squid-3.5.23.tar.gz [root@localhost src]# cd squid-3.5.23/ [root@localhost squid-3.5.23]# ./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-linux-netfilter --enable-async-io=240 --enable-default-err-language=Simplify_Chinese --disable-poll --enable-epoll --enable-gunregex && make && make install
上述配置項的具體做用以下:
--prefix=/usr/local/squid :指定安裝目錄;
--sysconfdir=/etc :單獨將配置文件修改到其餘目錄;
--enable-linux-netfilter:使用內核過濾;
--enable-async-io=值:異步I/O,提高存儲性能;
--enable-default-err-language=Simplify_Chinese :錯誤信息顯示語言。
--disable-poll 與--enable-epoll:關閉默認使用poll模式,開啓epoll模式提提高性能;
--enable-gunregex:使用GUN正則表達式。
更多的配置項能夠參考「./configure --help」。
安裝完成後,建立連接文件、建立用戶和組:
[root@localhost /]# # ln -s /usr/local/squid/sbin/* /usr/local/sbin/ [root@localhost /]# useradd -M -s /sbin/nologin squid [root@localhost /]# chown -R squid:squid /usr/local/squid/var/
二、修改squid的配置文件:
[root@localhost /]# vim /etc/squid.conf ........................... http_port 3128 #用來指定代理服務器監聽地址和端口,默認存在該行(默認端口號是3128) cache_effective_user squid #用來指定squid的程序用戶,用來設置初始化等相關信息。 #不然啓動不成功,該行及下一行配置項默認不存在。 cache_effective_group squid #用來指定運行組。需手動添加該行 ...........................
三、squid服務的運行控制:
[root@localhost /]# squid -k parse #檢查配置文件語法是否正確,只要在輸出的信息中沒有ERROR字樣便可。 [root@localhost /]# squid -z #初始化緩存目錄。 [root@localhost /]# squid #啓動squid服務。 #爲了方便控制服務,編寫一個squid服務腳本,並添加爲系統服務,腳本以下: [root@localhost /]# vim /etc/init.d/squid #!/bin/bash #chkconfig: 2345 90 25 #config: /etc/squid.conf #pidfile: /usr/local/squid/var/run/squid.pid #description: Squid - Internet Object Cache PID="/usr/local/squid/var/run/squid.pid" CONF="/etc/squid.conf" CMD="/usr/local/squid/sbin/squid" case "$1" in start) netstat -anpt | grep squid &> /dev/null if [ $? -eq 0 ] then echo "squid is running" else echo "正在啓動squid..." $CMD fi ;; stop) $CMD -k kill &> /dev/null rm -rf $PID &> /dev/null ;; status) [ -f $PID ] &> /dev/null if [ $? -eq 0 ] then netstat -anpt | grep squid else echo "squid is not running." fi ;; restart) $0 stop &> /dev/null echo "正在關閉squid..." $0 start &> /dev/null echo "正在啓動squid..." ;; reload) $CMD -k reconfigure ;; check) $CMD -k parse ;; *) echo "用法:$0 {start | stop | restart | reload | check | status}" ;; esac [root@localhost /]# chmod +x /etc/init.d/squid #賦予腳本執行權限 [root@localhost /]# chkconfig --add squid #添加爲系統服務 [root@localhost /]# systemctl restart squid #重啓服務以測試腳本是否可用
如今基於傳統代理的squid代理服務器已經配置完成了,模擬的web服務器省略配置過程,可參考博文:http://www.javashuo.com/article/p-qamvjqdc-mt.html 搭建web服務器。如今開啓客戶端進行配置及驗證:
一、打開瀏覽器,手動指定代理服務器:
1)
2)
3)指定代理服務器IP及端口號:
4)訪問驗證(看到了網站默認的首頁):
這裏沒作DNS服務,若須要DNS服務,參考博文:http://www.javashuo.com/article/p-urpobsed-eo.html
至此,基於傳統代理的部署已經完成,並測試成功。
配置squid服務器的透明代理參考博文: http://www.javashuo.com/article/p-mnfxxwsf-gr.html