Squid大多用做http服務的緩存服務器,緩存圖片等靜態文件能夠加速客戶端的請求返回速度。css
Squid不只能夠作正向代理,又能夠作反向代理。看成爲正向代理時,Squid後面是客戶端,客戶端想上網無論什麼網都得通過Squid. 當一個用戶(客戶端)想要請求一個主頁時,它向Squid發出一個申請,要Squid替它請求,而後Squid 鏈接用戶要請求的網站並請求該主頁,接着把該主頁傳給用戶同時保留一個備份,當別的用戶請求一樣的頁面時,Squid把保存的備份當即傳給用戶,使用戶以爲速度至關快。nginx
正向代理,Squid後面是客戶端,客戶端上網要經過Squid去上;反向代理,Squid後面是服務器,服務器返回給用戶數據須要走Squid.web
1、搭建Squid正向代理vim
一、安裝squid後端
[root@tpp ~]# yum install -y squid
二、編輯配置文件瀏覽器
[root@tpp ~]# vim /etc/squid/squid.conf //修改一處,添加兩句
找到:緩存
#cache_dir ufs /var/spool/squid 100 16 256
改成:
服務器
cache_dir ufs /var/spool/squid 1024 16 256 //1024緩存大小,16個子目錄,256個二級目錄
接着添加:dom
cache_mem 128 MB //指定緩存佔用內存的大小
在最後面添加:curl
refresh_pattern \.(jpg|png|gif|js|css|mp3|mp4) 1440 20% 2880 ignore-reload
//設置緩存對象,1440爲緩存時間,ignore-reload爲忽略從新加載
以下圖所示:
保存後測試下
配置文件是否有語法錯誤:
[root@tpp ~]# squid -kcheck
啓動squid:
[root@tpp ~]# /etc/init.d/squid start
init_cache_dir /var/spool/squid... 正在啓動 squid:. [肯定]
初始化squid後咱們能夠看看是否生成了緩存日誌:
[root@tpp ~]# cat /var/log/squid/cache.log
也能夠去緩存目錄下看看生成的文件:
[root@tpp ~]# ls /var/spool/squid/ //16個子目錄,子目錄下面一共還有256個二級目錄
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F swap.state
三、測試
(1)在Windows上測試
打開IE瀏覽器-->工具-->Internet選項-->局域網設置-->勾上代理服務器-->高級-->HTTP:服務器地址爲:192.168.0.109,端口3128-->肯定-->肯定-->肯定
接着咱們用瀏覽器上網打開www.baidu.com,隨便訪問下網站。咱們再抓包分析下是否實現了代理
[root@tpp ~]# tcpdump -nn port 3128 //能夠看到抓到了好多包
咱們也能夠去緩存目錄的二級子目錄下看到會生成256個三級目錄,第一個三級目錄/00/下會存放256個文件,放滿了即放在到下一個三級目錄/01/下,依次存放。
[root@tpp ~]# ls /var/spool/squid/00/00
(2)在Linux上測試
[root@tpp ~]# curl -x127.0.0.1:3128 www.baidu.com -I
HTTP/1.0 200 OK
Date: Tue, 15 Sep 2015 13:58:49 GMT
四、設置黑名單/白名單
設置了代理服務器後能夠訪問任何的網站,那麼咱們還能夠控制上網,不讓訪問特定的網站。
(1)設置白名單:只能訪問百度,其餘的網址都不能訪問。
編輯配置文件,設置acl
[root@tpp ~]# vim /etc/squid/squid.conf //在acl下面接着寫入如下內容
acl http proto HTTP
acl good_domain dstdomain .baidu.com //good_domain自定義,dstdomain跟白名單
http_access allow http good_domain
http_access deny http !good_domain
保存退出後檢測配置文件是否有錯誤,重啓服務。
[root@tpp ~]# squid -k check //可簡寫爲 -kch
[root@tpp ~]# /etc/init.d/squid restart
中止 squid:................ [肯定]
正在啓動 squid:. [肯定]
注:在這裏咱們也能夠不用重啓,直接從新加載就行,命令以下:
[root@tpp ~]# squid -k reconfigure //可簡寫爲 -kre
1)Windows下測試:
咱們打開網頁,能夠發現只能上百度,其餘的網站所有不能上。
2)Linux下測試:
[root@tpp ~]# curl -x127.0.0.1:3128 www.baidu.com -I
HTTP/1.0 200 OK
[root@tpp ~]# curl -x127.0.0.1:3128 www.qq.com -I
HTTP/1.0 403 Forbidden
(2)設置黑名單:除了百度,其餘的網站都能訪問。
[root@tpp ~]# vim /etc/squid/squid.conf //替換上面的白名單,寫入如下內容
acl http proto HTTP
acl bad_domain dstdomain .baidu.com
http_access deny http bad_domain
http_access allow http !bad_domain
測試同上面同樣。
2、搭建Squid反向代理
反向代理主要用於緩存靜態項,由於諸多靜態項目尤爲是圖片、流媒體等比較耗費帶寬,好比聯通網訪問電信的資源原本就慢,若是再去訪問大流量的圖片、流媒體那更會慢了,因此若是在聯通網配置一個squid反向代理,讓聯通客戶端直接訪問這個聯通squid,而這些靜態項已經被緩存在了squid上,這樣就大大加快了訪問速度。
反向代理過程和前面的正向代理沒有什麼太大區別,惟一的區別是配置文件中一個地方須要改動一下。(爲了更好地實現效果,咱們先把以前配置的正向代理註釋掉,瀏覽器也取消代理設置)
一、編輯配置文件
[root@tpp ~]# vim /etc/squid/squid.conf
找到:http_port 3128
改成:http_port 80 accel vhost vport
而後再增長要代理的後端真實服務器信息(這裏用qq.com和baidu.com來作例子):
cache_peer 101.226.103.106 parent 80 0 originserver name=a
cache_peer_domain a www.qq.com
cache_peer 115.239.211.112 parent 80 0 originserver name=b
cache_peer_domain b www.baidu.com
注:cache_peer爲配置後端的服務器的ip(經過ping查看真實ip)以及端口,name後邊爲要配置的域名,這裏和後面的cache_peer_domain相對應。實際的應用中,ip大多爲內外ip,而域名也許會有多個,若是是squid要代理一臺web上的全部域名,那麼就寫成這樣:
cache_peer 192.168.10.111 80 0 originserver
後面的cache_peer_domain 也不用寫了。
二、測試反向代理
先檢查配置文件是否有錯
[root@tpp ~]# squid -krestart
squid: ERROR: No running copy
這裏報錯了,說沒有運行squid,咱們查看下80端口的狀態
[root@tpp ~]# netstat -nlp
注:能夠發現80端口被nginx服務佔用了,由於以前在這臺機器上配置過nginx服務,因此80端口被nginx服務佔據着,致使squid服務不能啓動,先殺死掉nginx服務進程,再啓動squid服務:
[root@tpp ~]# killall nginx
[root@localhost ~]# /etc/init.d/squid start
正在啓動 squid:. [肯定]
(1)在Windows下測試
首先找到C:\Windows\System32\drivers\etc\hosts文件,添加以下:
192.168.0.109 www.baidu.com www.qq.com
咱們打開瀏覽器,測試下只能訪問www.baidu.com www.qq.com這兩個網站,其餘的都不能訪問。
(2)在Linux下測試
[root@localhost ~]# curl -x127.0.0.1:80 www.baidu.com
[root@localhost ~]# curl -x127.0.0.1:80 www.qq.com
[root@localhost ~]# curl -x127.0.0.1:80 www.sina.com
看以看到結果和Windows下測試結果同樣。