Squid是linux系統中最爲流行的一款高性能代理服務軟件,一般用做Web網站的前置緩存服務,可以代替用戶向網站服務器請求頁面數據並進行緩存。python
簡單來講,Squid服務程序會按照收到的用戶請求向網站源服務器請求頁面、圖片等所需的數據,並將服務器返回的數據存儲在運行Squid服務程序的服務器上。linux
當有用戶再請求相同的數據時,則能夠直接將存儲服務器本地的數據交付給用戶,這樣不只減小了用戶的等待時間,還緩解了網站服務器的負載壓力。vim
在使用Squid服務程序爲用戶提供緩存代理服務時,具備正向代理模式和反向代理模式之分。瀏覽器
正向代理模式:讓用戶經過Squid服務程序獲取網站頁面等資源,以及基於訪問控制列表(ACL)功能對用戶訪問網站行爲進行限制,在具體的服務方式上又分爲標準代理模式與透明代理模式。 標準正向代理模式:把網站數據緩存到服務器本地,提升數據資源被再次訪問時的效率,可是用戶在上網時必須在瀏覽器等軟件中填寫代理服務器的IP地址與端口號信息,不然默認不使用代理服務。 透明正向代理模式:做用與標準正向代理模式基本相同,區別是用戶不須要手動指定代理服務器的IP地址與端口號,因此這種代理服務對於用戶來說是相對透明的。 反向代理模式:讓多臺節點主機反向緩存網站數據,從而加快用戶訪問速度。
正向代理服務的拓撲圖:緩存
反向代理服務的拓撲圖:服務器
準備兩臺虛擬機,一臺用做Squid服務器,另一臺用做Squid客戶端。網絡
Squid服務器和客戶端的操做系統和IP地址信息:架構
主機名稱 | 操做系統 | IP地址 |
Squid服務器 | RHEL 7 | 外網:dhcp獲取 內網:192.168.10.10 |
Squid客戶端 | RHEL 7 | 內網:192.168.10.20 |
這樣一來,咱們就有了一臺既能訪問內網,又能訪問外網的虛擬機了。一下子須要把Squid服務程序部署在這臺虛擬機上,而後讓另一臺本來只能訪問內網的虛擬機(即Squid客戶端)經過Squid服務器進行代理上網,從而使得Squid客戶端也能訪問外部 網站。性能
[root@zhangjh ~]# yum install squid
經常使用的Squid服務程序配置參數以及做用:網站
參數 | 做用 |
http_port 3128 | 監聽的端口號 |
cache_mem 64M | 內存緩衝區的大小 |
cache_dir ufs /var/spool/squid 2000 16 256 | 硬盤緩衝區的大小 |
cache_effective_user squid | 設置緩存的有效用戶 |
cache_effective_group squid | 設置緩存的有效用戶組 |
dns_nameservers IP地址 | 通常不設置,而是用服務器默認的DNS地址 |
cache_access_log /var/log/squid/access.log | 訪問日誌文件的保存路徑 |
cache_log /var/log/squid/cache.log | 緩存日誌文件的保存路徑 |
visible_hostname linuxprobe.com | 設置Squid服務器的名稱 |
Squid服務程序軟件包在正確安裝並啓動後,默認就已經能夠爲用戶提供標準正向代理模式服務了,而再也不須要單獨修改配置文件或者進行其餘操做。
肯定服務端和客戶端網絡互通,而且服務端能夠上外網。
[root@zhangjh ~]# ping 192.168.10.20 -c 3 -i 0.1 PING 192.168.10.20 (192.168.10.20) 56(84) bytes of data. 64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=0.754 ms 64 bytes from 192.168.10.20: icmp_seq=2 ttl=64 time=0.210 ms 64 bytes from 192.168.10.20: icmp_seq=3 ttl=64 time=0.236 ms --- 192.168.10.20 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 202ms rtt min/avg/max/mdev = 0.210/0.400/0.754/0.250 ms [root@zhangjh ~]# ping www.baidu.com -c 3 -i 0.1 PING www.a.shifen.com (111.13.100.92) 56(84) bytes of data. 64 bytes from 111.13.100.92: icmp_seq=1 ttl=54 time=6.70 ms 64 bytes from 111.13.100.92: icmp_seq=2 ttl=54 time=7.54 ms 64 bytes from 111.13.100.92: icmp_seq=3 ttl=54 time=8.97 ms --- www.a.shifen.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 207ms rtt min/avg/max/mdev = 6.706/7.740/8.973/0.936 ms
客戶端打開瀏覽器,設置代理。
默認代理端口號是3128,如圖所示:
而後打開瀏覽器,訪問任意網站:
Squid服務程序默認使用312八、3401與4827等端口號,所以能夠把默認使用的端口號修改成其餘值,以便起到必定的保護做用。
[root@zhangjh ~]# vim /etc/squid/squid.conf 58 # Squid normally listens to port 3128 59 http_port 8888
修改完後重啓squid服務,客戶端修改代理端口號便可正常訪問。
ACL訪問控制:
在平常工做中,企業員工通常是經過公司內部的網關服務器來訪問互聯網,當將Squid服務程序部署爲公司網絡的網關服務器後,Squid服務程序的訪問控制列表(ACL)功能將發揮它的用武之地。
它能夠根據指定的策略條件來緩存數據或限制用戶的訪問。好比不少公司會分時段地禁止員工逛淘寶、打網頁遊戲,這些禁止行爲均可以經過Squid服務程序的ACL功能來實現。
實例:禁止全部客戶端訪問網址中包含game關鍵詞的網站。
一、編輯squid配置文件
[root@zhangjh ~]# vim /etc/squid/squid.conf
添加兩行: acl deny_keyword url_regex -i game http_access deny deny_keyword [root@zhangjh ~]# systemctl restart squid
禁止以前是能夠訪問騰訊遊戲頁面的:
禁止以後效果:
「透明」二字指的是讓用戶在沒有感知的狀況下使用代理服務,這樣的好處是一方面不須要用戶手動配置代理服務器的信息,進而下降了代理服務的使用門檻;另外一方面也能夠更隱祕地監督員工的上網行爲。
在透明代理模式中,用戶無須在瀏覽器或其餘軟件中配置代理服務器地址、端口號等信息,而是由DHCP服務器將網絡配置信息分配給客戶端主機。這樣只要用戶打開瀏覽器便會自動使用代理服務了。
一、修改客戶端的網絡配置
root@zhangjh ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond-bond0 IPADDR=192.168.10.20 NETMASK=255.255.255.0 GATEWAY=192.168.10.10 [root@zhangjh ~]# vim /etc/resolv.conf nameserver 8.8.8.8 nameserver 114.114.114.114 [root@zhangjh ~]# systemctl restart network
二、把客戶端瀏覽器的代理信息刪除
三、配置防火牆
四、編輯配置文件
[root@zhangjh ~]# vim /etc/squid/squid.conf 60 http_port 3128 transparent 61 62 # Uncomment and adjust the following to add a disk cache directory. 63 cache_dir ufs /var/spool/squid 100 16 256
[root@zhangjh ~]# squid -k parse .....省略輸出內容..... [root@zhangjh ~]# squid -z .....省略輸出內容..... [root@zhangjh ~]# systemctl restart squid
五、這時客戶端主機再刷新一下瀏覽器,就又能訪問網絡了
網站頁面是由靜態資源和動態資源一塊兒組成的,其中靜態資源包括網站架構CSS文件、大量的圖片、視頻等數據,這些數據相對於動態資源來講更加穩定,通常不會常常發生改變。可是,隨着建站技術的更新換代,外加人們不斷提高的審美能力,這些靜態資源佔據的網站空間愈來愈多。若是可以把這些靜態資源從網站頁面中抽離出去,而後在全國各地部署靜態資源的緩存節點,這樣不只能夠提高用戶訪問網站的速度,並且網站源服務器也會由於這些緩存節點的存在而下降負載。
反向代理是Squid服務程序的一種重要模式,其原理是把一部分本來向網站源服務器發起的用戶請求交給Squid服務器緩存節點來處理。可是這種技術的弊端也很明顯,若是有心懷不軌之徒將本身的域名和服務器反向代理到某個知名的網站上面,從理論上來說,當用戶訪問到這個域名時,也會看到與那個知名網站同樣的內容(有些詐騙網站就是這樣騙取用戶信任的)。所以,當前許多網站都默認禁止了反向代理功能。開啓了CDN(內容分發網絡)服務的網站也能夠避免這種竊取行爲。若是訪問開啓了防禦功能的網站,通常會看到如圖所示的報錯信息。
一、修改配置文件
[root@zhangjh ~]# vim /etc/squid/squid.conf 60 http_port 192.168.1.106:80 vhost #橋接網卡ip地址 61 cache_peer 42.121.252.58 parent 80 0 originserver #網站原服務器ip地址,能夠經過ping網站域名得到 [root@zhangjh ~]# systemctl restart squid
二、使用反向代理模式訪問網站