squid反向代理(实现缓存)加速web
實驗:squid反向代理服務器加速web
-by zlong
一、實驗環境
(1)兩臺linux主機(Red Hat Enterprise Linux),分別是RHEL1-WEB和RHEL2-SQUID,squid代理服務器和DNS服務器在RHEL2-SQUID上,apache服務器在RHEL1-WEB上
RHEL1-WEB(內網)上
IP | 網關 | 域名 |
192.168.1.107/24(eth0) | 192.168.1.1 | |
10.1.1.2/24(eth0:1) | 10.1.1.1 | Web1.huawei.com |
10.1.1.3/24(eth0:2) | 10.1.1.1 | Web2.huawei.com |
10.1.1.4/24(eth0:3) | 10.1.1.1 | Web3.huawei.com |
RHEL2-SQUID(squid代理服務器)
外網網卡eth0 | 192.168.1.109/24 |
內網網卡eth1 | 10.1.1.1/24 |
(2)Win7本地主機:
IP:192.168.1.104/24gateway:192.168.1.1
(3)瀏覽器
Sougou3.2
二、配置網卡的IP
兩臺linux的網卡eth0上的IP事先已配好,且已設置開機啟動此處略
[root@RHEL1-WEBetc]# ifconfig eth0:1 10.1.1.2netmask 255.255.255.0 up
[root@RHEL1-WEBetc]# ifconfig eth0:2 10.1.1.3netmask 255.255.255.0 up
[root@RHEL1-WEBetc]# ifconfig eth0:3 10.1.1.4netmask 255.255.255.0 up
[root@RHEL2-SQUIDsquid]# ifconfig eth1 10.1.1.1 netmask 255.255.255.0 up
其他網卡開機啟動的設置
(1)RHEL1-WEB上的eth0:1、eth0:2、eth0:3
[root@RHEL1-WEBconf]# cd /etc/sysconfig/network-scripts/
[root@RHEL1-WEBnetwork-scripts]# cp -p ifcfg-eth0 ifcfg-eth0:1
[root@RHEL1-WEBnetwork-scripts]# cp -p ifcfg-eth0 ifcfg-eth0:2
[root@RHEL1-WEBnetwork-scripts]# cp -p ifcfg-eth0 ifcfg-eth0:3
[root@RHEL1-WEBnetwork-scripts]# vi ifcfg-eth0:1
修改為以下內容
DEVICE=eth0:1
BOOTPROTO=static
ONBOOT=yes
IPADDR=10.1.1.2
NETMASK=255.255.255.0
GATEWAY=10.1.1.1
eth0:2、eth0:3仿照進行配置
(2)RHEL2-SQUID上的eth1
[root@RHEL2-SQUIDsquid]# cd /etc/sysconfig/network-scripts/
[root@RHEL2-SQUIDnetwork-scripts]# vi ifcfg-eth1
修改為以下內容
DEVICE=eth1
BOOTPROTO=static
ONBOOT=yes
IPADDR=10.1.1.1
NETMASK=255.255.255.0
GATEWAY=10.1.1.1
HWADDR=00:0c:29:4c:81:11
三、創建huawei.com的正向區域
DNS服務器的安裝此處省略!
[root@RHEL2-SQUID~]# cd /var/named/chroot/etc
[root@RHEL2-SQUIDetc]#vi named.rfc1912.zones
增加以下區域:
zone "huawei.com"IN {
type master;
file "huawei.com.hosts";
allow-update {none; };
};
創建huawei.com的正向解析區域數據庫文件
[root@RHEL2-SQUIDetc]#cd /var/named/chroot/var/named
[root@RHEL2-SQUIDnamed]# cp -p localhost.zonehuawei.com.hosts
[root@RHEL2-SQUIDnamed]# vi huawei.com.hosts
編輯為以下內容:
$TTL86400
@IN SOAns.huawei.com.root.huawei.com. (
42; serial (d. adams)
3H; refresh
15M; retry
1W; expiry
1D ); minimum
IN NSns.huawei.com.
ns.huawei.com.IN A10.1.1.1
www.huawei.com.IN A10.1.1.2
IN A10.1.1.3
IN A10.1.1.4
web1.huawei.com.IN A10.1.1.2
web2.huawei.com.IN A10.1.1.3
web3.huawei.com.IN A10.1.1.4
保存退出,重啟DNS
[root@RHEL2-SQUIDnamed]# service named restart
修改DNS的客戶端配置文件
[root@RHEL2-SQUIDnamed]# vi /etc/resolv.conf
在末尾添加:(若之前其中有其他域的DNS,不用覆蓋,不影響效果)
search huawei.com
nameserver10.1.1.1
四、安裝配置squid服務器
在RHEL2-SQUID上進行
[root@RHEL2-SQUIDnamed]# mount /dev/hdc /mnt/cdrom
mount: blockdevice /dev/hdc is write-protected, mounting read-only
[root@RHEL2-SQUIDnamed]# cd /mnt/cdrom/Server
[root@RHEL2-SQUIDServer]# find -name "squid*"
./squid-2.6.STABLE21-3.el5.i386.rpm
[root@RHEL2-SQUIDServer]#rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm
warning:squid-2.6.STABLE21-3.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID37017186
Preparing...########################################### [100%]
1:squid########################################### [100%]
安裝成功,下面開始配置
[root@RHEL2-SQUIDServer]# cd /etc/squid
[root@RHEL2-SQUIDsquid]# cp -p squid.confsquid.conf.bak
[root@RHEL2-SQUIDsquid]# rm –rf squid.conf
squid.conf 的配置是實現緩存的重點和原理
[root@RHEL2-SQUIDsquid]# vi squid.conf
添加以下配置信息
http_port80 accel vhost vport
cache_dirufs /var/spool/squid 100 16 256
cache_mem32 MB
cache_swap_low90
cache_swap_high95
cache_access_log/var/log/squid/access.log
cache_effective_usersquid
cache_effective_groupsquid
aclall src 0.0.0.0/0.0.0.0
acllocalhost src 127.0.0.1/255.255.255.255
http_accessallow localhost
http_accessallow all
http_reply_accessallow all
coredump_dir/var/spool/squid
visible_hostnamewww.huawei.com
cache_peer10.1.1.2 parent 80 0no-queryoriginserver weight=1 name=web1
cache_peer10.1.1.3 parent 80 0no-queryoriginserver weight=1 name=web2
cache_peer10.1.1.4 parent 80 0no-queryoriginserver weight=1 name=web3
cache_peer_domainweb1 www.huawei.com
cache_peer_domainweb2 www.huawei.com
cache_peer_domainweb3 www.huawei.com
cache_peer_accessweb1 allow all
cache_peer_accessweb2 allow all
cache_peer_accessweb3 allow all
保存退出
創建squid的緩存目錄,并重啟squid,設置開機啟動,修改DNS客戶端配置文件
[root@RHEL2-SQUIDsquid]#squid–z
[root@RHEL2-SQUIDsquid]# service squid restart
[root@RHEL2-SQUIDsquid]#ntsysv
[root@RHEL2-SQUIDetc]# viresolv.conf
更改緩存目錄的文件和目錄所有者以及權限
[root@RHEL2-SQUIDspool]# chown -R squid.squid squid
[root@RHEL2-SQUIDspool]# chmod 777 squid
五、安裝配置apache
[root@RHEL1-WEB ]#cd /mnt/cdrom/Server
[root@RHEL1-WEBServer]# find -name "httpd*"
./httpd-2.2.3-22.el5.i386.rpm
./httpd-devel-2.2.3-22.el5.i386.rpm
./httpd-manual-2.2.3-22.el5.i386.rpm
[root@RHEL1-WEBServer]# rpm -ivh httpd-2.2.3-22.el5.i386.rpm
warning:httpd-2.2.3-22.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
error: Faileddependencies:
libapr-1.so.0 isneeded by httpd-2.2.3-22.el5.i386
libaprutil-1.so.0is needed by httpd-2.2.3-22.el5.i386
有包的依賴關系,依次安裝下面幾個包
[root@RHEL1-WEBServer]# rpm -ivh apr-1.2.7-11.i386.rpm
[root@RHEL1-WEBServer]# rpm -ivh postgresql-libs-8.1.11-1.el5_1.1.i386.rpm
[root@RHEL1-WEBServer]# rpm -ivh apr-util-1.2.7-7.el5.i386.rpm
[root@RHEL1-WEBServer]# rpm -ivh httpd-2.2.3-22.el5.i386.rpm
安裝完畢,設置開機啟動
[root@RHEL1-WEBServer]# ntsysv
配置
[root@RHEL1-WEBetc]# cd /etc/httpd/conf/
[root@RHEL1-WEBconf]# ll
總計 52
-rw-r--r-- 1 rootroot 33726 2008-11-12 httpd.conf
-rw-r--r-- 1 rootroot 12958 2008-11-12 magic
[root@RHEL1-WEBconf]# cp -p httpd.confhttpd.conf.bak
[root@RHEL1-WEBconf]# vihttpd.conf
(1)找到#ServerNamenew.host.name:80這一行修改為:
ServerName10.1.1.1:80(這里更改的是apache默認站點的名稱和端口號,很重要的一步,缺少它最后解析不出來)
(2)在配置文件末尾添加以下內容(三個基于IP的虛擬主機)
<VirtualHost10.1.1.2>
ServerAdminwebmaster@dummy-host.example.com
DocumentRoot/www/web1
ServerName web1.huawei.com
</VirtualHost>
<VirtualHost10.1.1.3>
ServerAdminwebmaster@dummy-host.example.com
DocumentRoot/www/web2
ServerName web2.huawei.com
</VirtualHost>
<VirtualHost 10.1.1.4>
ServerAdminwebmaster@dummy-host.example.com
DocumentRoot/www/web3
ServerName web3.huawei.com
</VirtualHost>
保存退出,創建虛擬主機的文檔根目錄及三個網站的相同的頁面index.html
[root@RHEL1-WEBconf]# mkdir -p /www/web1
[root@RHEL1-WEBconf]# mkdir -p /www/web2
[root@RHEL1-WEBconf]# mkdir -p /www/web3
[root@RHEL1-WEBconf]# vi /www/web1/index.html
輸入:這是網站的測試頁面!(測試信息)
[root@RHEL1-WEBconf]# cp -p /www/web1/index.html /www/web2/index.html
[root@RHEL1-WEBconf]# cp -p /www/web1/index.html /www/web2/index.html
[root@RHEL1-WEBconf]# cp -p /www/web1/index.html /www/web3/index.html
重啟httpd
[root@RHEL1-WEBconf]# service httpd restart
修改RHEL1-WEB上DNS的客戶端配置文件
[root@RHEL1-WEB named]#vi /etc/resolv.conf
在末尾添加:(若之前其中有其他域的DNS,不用覆蓋,不影響效果)
searchhuawei.com
nameserver10.1.1.1
六、激活squid服務器上的路由轉發功能
[root@RHEL2-SQUID~]#echo 1 > /proc/sys/net/ipv4/ip_forward
寫入開機啟動
[root@RHEL2-SQUID~]# vi /etc/rc.d/rc.local
編輯/etc/rc.d/rc.local在后面寫上上面一句
七、測試
(1)在win7上打開C:\windows\system32\drivers\etc\hosts
添加以下一條主機記錄:
192.168.1.109www.huawei.com
(2)把win7的首選DNS改為RHEL2-SQUID上squid服務器的外網IP,即192.168.1.109
(3)連通性測試
在RHEL1-WEB上:
第一次ping www.huawei.com
[root@RHEL1-WEB~]# ping www.huawei.com
PING www.huawei.com(10.1.1.2) 56(84) bytes of data.
64 bytes from10.1.1.2: icmp_seq=1 ttl=64 time=0.594 ms
64 bytes from10.1.1.2: icmp_seq=2 ttl=64 time=0.069 ms
第二次ping www.huawei.com
[root@RHEL1-WEB~]# ping www.huawei.com
PING www.huawei.com(10.1.1.4) 56(84) bytes of data.
64 bytes from10.1.1.4: icmp_seq=1 ttl=64 time=0.108 ms
64 bytes from10.1.1.4: icmp_seq=2 ttl=64 time=0.039 ms
第三次ping www.huawei.com
[root@RHEL1-WEB~]# ping www.huawei.com
PING www.huawei.com(10.1.1.3) 56(84) bytes of data.
64 bytes from10.1.1.3: icmp_seq=1 ttl=64 time=0.049 ms
64 bytes from10.1.1.3: icmp_seq=2 ttl=64 time=0.039 ms
64 bytes from10.1.1.3: icmp_seq=3 ttl=64 time=0.041 ms
通過連續三次ping,發現返回的IP都不一樣,由此可知通過DNS的輪詢配置實現了負載均衡(連續三次訪問web,squid分別把請求送給了三臺web,依次循環往復,減少了一臺web的壓力)
在RHEL2-SQUID上同樣可以得出上述結果!
在win7上:
C:\Users\guoyin>pingwww.huawei.com
正在 Ping www.huawei.com [192.168.1.109]具有 32 字節的數據:
來自192.168.1.109 的回復: 字節=32 時間=5ms TTL=64
來自192.168.1.109 的回復: 字節=32 時間<1ms TTL=64
來自192.168.1.109 的回復: 字節=32 時間<1ms TTL=64
來自192.168.1.109 的回復: 字節=32 時間<1ms TTL=64
C:\Users\guoyin>pingweb1.huawei.com
正在 Ping web1.huawei.com [10.1.1.2] 具有 32 字節的數據:
請求超時。
請求超時。
請求超時。
說明:在外網上ping www.huawei.com時,返回的IP是squid服務器的外網IP,而直接ping內網的web服務器時ping不通。由此可知隱藏了內網的web站點,實現了代理。
(4)在瀏覽器上測試
至此,測試成功。說明squid服務器成功搭建,能夠實現對內網web加速!
轉載于:https://blog.51cto.com/zlong37/1393727
總結
以上是生活随笔為你收集整理的squid反向代理(实现缓存)加速web的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows Phone APP中禁用
- 下一篇: 基于cmake28来编译安装mysql服