3 反向代理

3.1 问题

通过配置代理服务器,实现以下目标:

  1. 代理服务器可以将远程的Web服务器页面缓存在本地

  2. 代理服务器端口设置为80端口

  3. 用户通过访问代理服务器即可或则远程Web服务器上的页面内容

  4. 远程Web服务器对客户端用户是透明的

  5. 客户端通过代理访问www.tarena.com和bbs.tarena.com可以获得两台不同后端Web服务器的页面内容

3.2 方案

使用4台RHEL6虚拟机,其中一台作为Squid代理服务器,该服务器用来连接两个网段,因此需要配置两块网卡,地址分别为192.168.4.5和172.16.0.254。一台作为客户端测试主机,IP地址为172.16.0.100。一台Web服务器,地址为192.168.4.205,该Web服务器需要配置虚拟主机,基于www.tarena.com和bbs.tarena.com两个域名的虚拟主机,拓扑如图-6所示。

图-6

3.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:构建web服务器

1)使用yum安装web软件包

  1. [root@svr5 ~]# yum  -y  install  httpd

  2. .. ..

  3. [root@svr5 ~]# rpm  -q  httpd

  4. httpd-2.2.15-29.el6_4.x86_64

2)修改httpd配置文件,设置虚拟主机功能

  1. [root@svr5 ~]# cat /etc/httpd/conf/httpd.conf

  2. .. ..

  3. NameVirtualHost *:80

  4. <VirtualHost *:80>

  5. DocumentRoot /var/www/web1

  6. ServerName www.tarena.com

  7. CustomLog logs/www.tarena.com-access_log common

  8. VirtualHost>

  9. <VirtualHost *:80>

  10. DocumentRoot /var/www/web2

  11. ServerName bbs.tarena.com

  12. CustomLog logs/bbs.tarena.com-access_log common

  13. VirtualHost>

  14. [root@svr5 ~]# mkdir /var/www/{web1,web2}

3)启用httpd服务,并设为开机自动运行

  1. [root@svr5 ~]# service  httpd  restart  ;  chkconfig  httpd  on

  2. Stopping httpd:                                        [FAILED]

  3. Starting httpd:                                        [OK

httpd服务默认通过TCP 80端口监听客户端请求:

3)为Web访问建立测试文件

在网站根目录/var/www/{web1,web2}下创建一个名为index.html的首页文件:

  1. [root@svr5 ~]# cat /var/www/web1/index.html

  2. <html>

  3. <title>Welcometitle>

  4. <body>

  5. <h1>www.tarena.comh1>

  6. body>

  7. html>

  8. [root@svr5 ~]# cat /var/www/web2/index.html

  9. <html>

  10. <title>Welcometitle>

  11. <body>

  12. <h1>bbs.tarena.comh1>

  13. body>

  14. html>

步骤二:部署Squid代理服务器

1)使用yum安装squid软件包:

  1. [root@svr5 ~]# yum  -y  install  squid

  2. .. ..

  3. [root@svr5 ~]# rpm  -q  squid

  4. squid-3.1.10-19.el6_4.x86_64

2)修改/etc/squid/squid.conf配置文件:

  1. [root@svr5 ~]# vim /etc/squid/squid.conf

  2. .. ..

  3. http_port 80 vhost                            //设置反向代理

  4. visible_hostname squid.svr5.com                //设置主机名

  5. cache_peer  172.16.16.254  parent 80   0  originserver  name=www

  6. cache_peer  172.16.16.254  parent 80   0  originserver  name=bbs

  7. cache_peer_domain  bbs          bbs.tarena.com

  8. cache_peer_domain  www          www.tarena.com

  9. cache_mem 128 MB                                //内存缓存

  10. cache_dir ufs /var/spool/squid 200 16 128        //硬盘缓存

  11. http_access allow localnet                        //允许本机所在网络中的所有主机使用代理服务器

3)启动squid服务,并设置为开机启动:

  1. [root@svr5 ~]# service  squid restart; chkconfing squid on

  2. Stopping squid:                                            [FAILED]

  3. init_cache_dir /var/spool/squid...

  4. Starting squid: .                                          [  OK  ]

4)squid服务默认通过TCP 3128端口监听客户端请求:

  1. [root@svr5 ~]# netstat  -anptu  |  grep 80

  2. tcp        0        0        :::80        :::*        LISTEN        3213/(squid)

步骤三:客户端测试

通过/etc/hosts文件,配置域名解析,将域名解析为Squid服务器IP地址

  1. [root@svr5 ~]# cat /etc/hosts

  2. .. ..

  3. 192.168.4.5    www.tarena.com    bbs.tarena.com

2)客户端开启浏览器,分别访问两个不同的域名站点

  1. [root@svr5 ~]# firefox http://www.tarena.com

  2. [root@svr5 ~]# firefox http://bbs.tarena.com