squid之反向代理服务器
?代理服務(wù)器是使用非常普遍的一種將局域網(wǎng)主機(jī)聯(lián)入互聯(lián)網(wǎng)的一種方式,使用代理上網(wǎng)可以節(jié)約緊缺的IP地址資源,而且可以阻斷外部主機(jī)對(duì)內(nèi)部主機(jī)的訪問,使內(nèi)部網(wǎng)主機(jī)免受外部網(wǎng)主機(jī)的***。但是,如果想讓互聯(lián)網(wǎng)上的主機(jī)訪問內(nèi)部網(wǎng)的主機(jī)資源(例如:Web站點(diǎn)),又想使內(nèi)部網(wǎng)主機(jī)免受外部網(wǎng)主機(jī)***,一般的代理服務(wù)是不能實(shí)現(xiàn)的,需要使用反向代理來實(shí)現(xiàn)。
一.反向代理服務(wù)器概念
反向代理就是通常所說的WEB服務(wù)器加速,它是一種通過在繁忙的WEB服務(wù)器和Internet之間增加一個(gè)高速的WEB緩沖服務(wù)器(即:WEB反向代理服務(wù)器)來降低實(shí)際的WEB服務(wù)器的負(fù)載。
?
反向代理服務(wù)器承擔(dān)了對(duì)原始WEB服務(wù)器的靜態(tài)頁面的請(qǐng)求,防止原始服務(wù)器過載。它位于本地WEB服務(wù)器和Internet之間,處理所有對(duì)WEB服務(wù)器的請(qǐng)求,組織了WEB服務(wù)器和Internet的直接通信。如果互聯(lián)網(wǎng)用戶請(qǐng)求的頁面在代理服務(wù)器上有緩沖的話,代理服務(wù)器直接將緩沖內(nèi)容發(fā)送給用戶。如果沒有緩沖則先向WEB服務(wù)器發(fā)出請(qǐng)求,取回?cái)?shù)據(jù),本地緩存后再發(fā)送給用戶。這種方式通過降低了向WEB服務(wù)器的請(qǐng)求數(shù)從而降低了WEB服務(wù)器的負(fù)載。
而Squid是一種在Linux系統(tǒng)下使用的優(yōu)秀的代理服務(wù)器軟件.
二.反向代理和其它代理的比較
下面將對(duì)幾種典型的代理服務(wù)作一個(gè)簡單的比較。在網(wǎng)絡(luò)上常見的代理服務(wù)器有三種:1. 標(biāo)準(zhǔn)的代理緩沖服務(wù)器
一個(gè)標(biāo)準(zhǔn)的代理緩沖服務(wù)被用于緩存靜態(tài)的網(wǎng)頁(例如:html文件和圖片文件等)到本地網(wǎng)絡(luò)上的一臺(tái)主機(jī)上(即代理服務(wù)器)。當(dāng)被緩存的頁面被第二次訪問的時(shí)候,瀏覽器將直接從本地代理服務(wù)器那里獲取請(qǐng)求數(shù)據(jù)而不再向原web站點(diǎn)請(qǐng)求數(shù)據(jù)。這樣就節(jié)省了寶貴的網(wǎng)絡(luò)帶寬,而且提高了訪問速度。但是,要想實(shí)現(xiàn)這種方式,必須在每一個(gè)內(nèi)部主機(jī)的瀏覽器上明確指明代理服務(wù)器的IP地址和端口號(hào)。客戶端上網(wǎng)時(shí),每次都把請(qǐng)求送給代理服務(wù)器處理,代理服務(wù)器根據(jù)請(qǐng)求確定是否連接到遠(yuǎn)程web服務(wù)器獲取數(shù)據(jù)。如果在本地緩沖區(qū)有目標(biāo)文件,則直接將文件傳給用戶即可。如果沒有的話則先取回文件,先在本地保存一份緩沖,然后將文件發(fā)給客戶端瀏覽器。
2. 透明代理緩沖服務(wù)器
?
透明代理緩沖服務(wù)和標(biāo)準(zhǔn)代理服務(wù)器的功能完全相同。但是,代理操作對(duì)客戶端的瀏覽器是透明的(即不需指明代理服務(wù)器的IP和端口)。透明代理服務(wù)器阻斷網(wǎng)絡(luò)通信,并且過濾出訪問外部的HTTP(80端口)流量。如果客戶端的請(qǐng)求在本地有緩沖則將緩沖的數(shù)據(jù)直接發(fā)給用戶,如果在本地沒有緩沖則向遠(yuǎn)程web服務(wù)器發(fā)出請(qǐng)求,其余操作和標(biāo)準(zhǔn)的代理服務(wù)器完全相同。對(duì)于Linux操作系統(tǒng)來說,透明代理使用Iptables或者Ipchains實(shí)現(xiàn)。因?yàn)椴恍枰獙?duì)瀏覽器作任何設(shè)置,所以,透明代理對(duì)于ISP(Internet服務(wù)器提供商)特別有用。
?
3. 反向代理緩沖服務(wù)器
反向代理是和前兩種代理完全不同的一種代理服務(wù)。使用它可以降低原始WEB服務(wù)器的負(fù)載。反向代理服務(wù)器承擔(dān)了對(duì)原始WEB服務(wù)器的靜態(tài)頁面的請(qǐng)求,防止原始服務(wù)器過載。它位于本地WEB服務(wù)器和Internet之間,處理所有對(duì)WEB服務(wù)器的請(qǐng)求,組織了WEB服務(wù)器和Internet的直接通信。如果互聯(lián)網(wǎng)用戶請(qǐng)求的頁面在代理服務(wù)器上有緩沖的話,代理服務(wù)器直接將緩沖內(nèi)容發(fā)送給用戶。如果沒有緩沖則先向WEB服務(wù)器發(fā)出請(qǐng)求,取回?cái)?shù)據(jù),本地緩存后再發(fā)送給用戶。這種方式通過降低了向WEB服務(wù)器的請(qǐng)求數(shù)從而降低了WEB服務(wù)器的負(fù)載。
三.反向代理服務(wù)器的工作原理
?
當(dāng)用戶瀏覽器發(fā)出一個(gè)HTTP請(qǐng)求時(shí),通過域名解析將請(qǐng)求定向到反向代理服務(wù)器(如果要實(shí)現(xiàn)多個(gè)WEB服務(wù)器的反向代理,需要將多個(gè)WEB服務(wù)器的域名都指向反向代理服務(wù)器)。由反向代理服務(wù)器處理器請(qǐng)求。反向代理一般只緩存可緩沖的數(shù)據(jù)(比如html網(wǎng)頁和圖片等),而一些CGI腳本程序或者ASP之類的程序不緩存。它根據(jù)從WEB服務(wù)器返回的HTTP頭標(biāo)記來緩沖靜態(tài)頁面。
四.代理服務(wù)器軟件squid簡介
Squid Internet Object Cache (Harvest Project的后續(xù)版本) 是美國政府大力助的一項(xiàng)研究計(jì)劃,其目的為解決網(wǎng)絡(luò)帶寬不足的問題,是現(xiàn)在Unix系統(tǒng)上使用者最多功能也最完整的一套軟體。Apache和Netscape雖附有相關(guān)的Proxy模塊,但因其功能簡單而不夠普及。有關(guān)squid的詳細(xì)說明可到squid網(wǎng)站(http://www.squid-cache.org)查詢。
Squid 是一個(gè)萬維網(wǎng)客戶的高性能代理緩存服務(wù)器。它支持 FTP、gopher 以及 HTTP 數(shù)據(jù)對(duì)象。與傳統(tǒng)的緩存軟件不同,Squid 只用一個(gè)非堵塞的 I/O 驅(qū)動(dòng)的進(jìn)程來處理所有請(qǐng)求。Squid 保存元數(shù)據(jù),把特別熱門的對(duì)象緩存在內(nèi)存中;它還緩存 DNS 查尋,支持非堵塞 DNS 查尋,并對(duì)失敗的請(qǐng)求實(shí)現(xiàn)負(fù)緩存。
Squid 由一個(gè)主服務(wù)器程序 squid,一個(gè)域名系統(tǒng)查尋程序 (dnsserver),一個(gè)用來檢索 FTP 數(shù)據(jù)的程序 (ftpget),以及一些管理和客戶工具組成。
五.使用squid實(shí)現(xiàn)反向代理,我們用一個(gè)案例來說明反向代理,在下面的拓?fù)渲心軌驅(qū)崿F(xiàn)客戶端主機(jī)通過反向代理訪問內(nèi)部網(wǎng)的主機(jī)資源,例如:Web站點(diǎn)
?
(1)我們?cè)?/span>linux系統(tǒng)中安裝squid
1.掛載光盤到指定目錄中,并安裝squid軟件包(服務(wù)器需要2塊網(wǎng)卡,1塊是(圖中eth1)橋接用來連接外網(wǎng),一塊是(圖中eth0)host-only鏈接方式,用于和內(nèi)網(wǎng)主機(jī)鏈接)
通過rpm來安裝squid軟件包
[root@localhost ~]# mkdir /mnt/cdrom??????? ?#新建光盤掛載點(diǎn)
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom? #把光盤掛載到掛載點(diǎn)
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@localhost ~]# cd /mnt/cdrom/Server??????? ?#切換到服務(wù)軟件包上
[root@localhost Server]# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm ??#安裝squid軟件包
warning: squid-2.6.STABLE21-3.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...??????????????? ########################################### [100%]
?? 1:squid????????????????? ########################################### [100%]
?[root@localhost Server]# rpm -ql squid |less?? ?#安裝好后我們來查看文件存放路徑
/etc/httpd/conf.d/squid.conf???? ??#和apache可以一起使用
/etc/logrotate.d/squid
/etc/pam.d/squid
/etc/rc.d/init.d/squid??????????? #控制腳本
/etc/squid/squid.conf????????? ?#服務(wù)器的主要配置文件
/etc/squid/squid.conf.default??? ?#如果配置文件不小心被刪除,這個(gè)文件是配置文件模板
/usr/lib/squid?????????????? ??#服務(wù)器的安裝位置
/var/log/squid??????????????? ?#日志存放位置
/var/spool/squid????????????? ?#緩存存放
[root@localhost Server]# service squid start????? ??#啟動(dòng)服務(wù)
init_cache_dir /var/spool/squid... 啟動(dòng) squid:.?????????? [確定]
?#Squid的監(jiān)聽端口是tcp/3128??? udp/3130
[root@localhost ~]# netstat -tupln |grep squid
tcp??????? 0????? 0 0.0.0.0:3128??????????????? 0.0.0.0:*?????????????????? LISTEN????? 4508/(squid)???????
udp??????? 0????? 0 0.0.0.0:44439?????????????? 0.0.0.0:*?????????????????????????????? 4508/(squid)???????
udp??????? 0????? 0 0.0.0.0:3130??????????????? 0.0.0.0:*?????????????????????????????? 4508/(squid)???????
[root@localhost ~]#
2.squid服務(wù)器啟動(dòng)后,我們知道squid的主配置文件在/etc/squid/squid.conf中,我們對(duì)文件進(jìn)行修改
http_access allow localhost
http_access allow all ???????#在大約635行,允許所有主機(jī)進(jìn)行訪問
http_port 192.168.102.44:80? vhost? #在大約919行,在外卡上進(jìn)行監(jiān)聽,代理服務(wù)器相當(dāng)于一個(gè)虛擬主機(jī)(vhost),客戶端主機(jī)訪問代理服務(wù)器的WWW網(wǎng)站,所以協(xié)議號(hào)80
?# cache_peer hostname type http-port icp-port [options]
#????????? For example,
???????????????????????????????????????? proxy? icp
?????? #????????? hostname???????????? type???? port?? port? options
?????? #????????? -------------------- -------- ----- -----? -----------
?#?????? cache_peer parent.foo.net?????? parent??? 3128? 3130? proxy-only default
?#?????? cache_peer sib1.foo.net???????? sibling?? 3128? 3130? proxy-only
?#?????? cache_peer sib2.foo.net???????? sibling?? 3128? 3130? proxy-only
???????? cache_peer 192.168.2.200?????? parent??? 80??? 0???? originserver
#在大約1175行,cache_peer表示緩存鄰居,內(nèi)部WWW服務(wù)器是代理服務(wù)器的原始服務(wù)器,也是鄰居,所以我們寫上行記錄,主機(jī)名字我們用WWW的IP地址,類型是父親關(guān)系,端口80,因?yàn)楫?dāng)客戶端訪問代理服務(wù)器時(shí),如果緩存中有,則直接回復(fù)客戶端,如果沒有代理服務(wù)器會(huì)訪問他的父親也就是原始服務(wù)器的WWW,所以端口為80,icp port我們寫0,optional為原始服務(wù)器。
(2)www服務(wù)器我用的是windows server 2003虛擬機(jī),此虛擬機(jī)用host-only連接在客戶端上配置IP地址,網(wǎng)關(guān)
?
我們來添加IIS(WEB和FTP)程序
在開始→設(shè)置→控制面板→添加刪除程序→選擇添加刪除windows組件→應(yīng)用程序服務(wù)器→internet信息服務(wù)器→外維網(wǎng)服務(wù)→確定,然后開始安裝
?
?
?
?
?
?
轉(zhuǎn)載于:https://blog.51cto.com/zhangxifan/1183478
總結(jié)
以上是生活随笔為你收集整理的squid之反向代理服务器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTTP 中的 304
- 下一篇: 排序相关算法-1