配置Squid服务
Squid大多用作http服務的緩存服務器,緩存圖片等靜態文件可以加速客戶端的請求返回速度。
Squid不僅可以做正向代理,又可以做反向代理。當作為正向代理時,Squid后面是客戶端,客戶端想上網不管什么網都得經過Squid. 當一個用戶(客戶端)想要請求一個主頁時,它向Squid發出一個申請,要Squid替它請求,然后Squid 連接用戶要請求的網站并請求該主頁,接著把該主頁傳給用戶同時保留一個備份,當別的用戶請求同樣的頁面時,Squid把保存的備份立即傳給用戶,使用戶覺得速度相當快。
正向代理,Squid后面是客戶端,客戶端上網要通過Squid去上;反向代理,Squid后面是服務器,服務器返回給用戶數據需要走Squid.
一、搭建Squid正向代理
1、安裝squid
[root@tpp ~]# yum install -y squid
2、編輯配置文件
[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個二級目錄
接著添加:
cache_mem 128 MB ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //指定緩存占用內存的大小
在最后面添加:
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
3、測試
(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
4、設置黑名單/白名單
設置了代理服務器后可以訪問任何的網站,那么我們還可以控制上網,不讓訪問特定的網站。
(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
測試同上面一樣。
二、搭建Squid反向代理
反向代理主要用于緩存靜態項,因為諸多靜態項目尤其是圖片、流媒體等比較耗費帶寬,比如聯通網訪問電信的資源本來就慢,如果再去訪問大流量的圖片、流媒體那更會慢了,所以如果在聯通網配置一個squid反向代理,讓聯通客戶端直接訪問這個聯通squid,而這些靜態項已經被緩存在了squid上,這樣就大大加快了訪問速度。
反向代理過程和前面的正向代理沒有什么太大區別,唯一的區別是配置文件中一個地方需要改動一下。(為了更好地實現效果,我們先把之前配置的正向代理注釋掉,瀏覽器也取消代理設置)
1、編輯配置文件
[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 也不用寫了。
2、測試反向代理
先檢查配置文件是否有錯
[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下測試結果一樣。
? ? ? 本文轉自 M四月天 51CTO博客,原文鏈接:http://blog.51cto.com/msiyuetian/1695166,如需轉載請自行聯系原作者
總結
- 上一篇: 【ARM】arm异常中断处理知识点
- 下一篇: canvas做的图片查看器1