一、反向代理概念
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
通常的代理服务器,只用于代理内部网络对Internet外部网络的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。不支持外部网络对内部网络的连接请求,因为内部网络对外部网络是不可见的。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。
反向代理就是通常所说的web服务器加速,它是一种通过在繁忙的web服务器和外部网络之间增加一个高速的web缓冲服务器来降低实际的web服务器的负载的一种技术。反向代理是针对web服务器提高加速功能,作为代理缓存,它并不是针对浏览器用户,而针对一台或多台特定的web服务器,它可以代理外部网络对内部网络的访问请求。
反向代理服务器会强制将外部网络对要代理的服务器的访问经过它,这样反向代理服务器负责接收客户端的请求,然后到源服务器上获取内容,把内容返回给用户,并把内容保存到本地,以便日后再收到同样的信息请求时,它会把本地缓存里的内容直接发给用户,以减少后端web服务器的压力,提高响应速度。
二、反向代理工作原理
(1) 用户通过域名发出访问web服务器的请求,该域名被DNS服务器解析为反向代理服务器的IP地址;
(2) 反向代理服务器接受用户的请求;
(3) 反向代理服务器在本地缓存中查找请求的内容,找到后直接把内容发送给用户;
(4) 如果本地缓存里没有用户所请求的信息内容,反向代理服务器会代替用户向源服务器请求同样的信息内容,并把信息内容发给用户,如果信息内容是缓存的还会把它保存到缓存中。
三、nginx反向代理
1. 实施环境:Centos 64位 PC机
2. 实施要求:
现有一内网网段,想去访问外网,不需要通过nat转换,而通过代理服务进行访问外网。
3. 实施拓扑图
使用亿图工具根据实施要求绘制出网络拓扑图,如下图所示:
4. 详细实施
首先在Linux系统上安装nginx,然后在实现代理,具体操作如下:
⑴ 在安装Nginx之前,确保系统已经安装了pcre-devel软件库。因此,先安装该库文件,把光盘挂在上安装。
//挂在光盘
[root@huangzhong ~]# mount /dev/cdrom /media/cdrom
//使用yum进行安装
[root@huangzhong Packages]# yum install pcre-devel-7.8-6.el6.x86_64.rpm
⑵ 安装libevent库文件
//解压安装包
[root@huangzhong ~]# tar -zxvf libevent-2.0.21-stable.tar.gz -C /usr/local/src/
//进入解压后目录下进行编译
[root@huangzhong ~]# cd /usr/local/src/libevent-2.0.21-stable/
[root@huangzhong libevent-2.0.21-stable]# ./configure --prefix=/usr/local/libevent //指出安装目录
//执行make和make install
[root@huangzhong libevent-2.0.21-stable]# make && make install
//编辑/etc/ld.so.conf.d/libevent.conf指明/usr/local/libevent/lib路径
[root@huangzhong lib]# vim /etc/ld.so.conf.d/libevent.conf
//编辑完后重新加载读取
[root@huangzhong lib]# ldconfig
//查看是否生效
[root@huangzhong lib]# ldconfig -pv |grep libevent
⑶ 安装配置nginx
//解压安装包
[root@huangzhong ~]# tar -zxvf nginx-1.6.0.tar.gz -C /usr/local/src/
//进入解压后的目录进行编译
[root@huangzhong nginx-1.6.0]# ./configure \
> --conf-path=/etc/nginx/nginx.conf \
> --error-log-path=/var/log/nginx/error.log \
> --http-log-path=/var/log/nginx/access.log \
> --pid-path=/var/run/nginx/nginx.pid \
> --lock-path=/var/lock/nginx.lock \
> --user=nginx \
> --group=nginx \
> --with-http_ssl_module \
> --with-http_flv_module \
> --with-http_stub_status_module \
> --with-http_gzip_static_module \
> --http-client-body-temp-path=/var/tmp/nginx/client/ \
> --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
> --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
> --with-pcre
//执行make和make install
[root@huangzhong nginx-1.6.0]# make && make install
//创建组和账号,并把账号加入到组
[root@huangzhong ~]# groupadd -r nginx
[root@huangzhong ~]# useradd -r -g nginx nginx
//进行语法检测
[root@huangzhong ~]# cd /usr/local/nginx/sbin/
[root@huangzhong sbin]# ./nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] mkdir() "/var/tmp/nginx/client/" failed (2: No such file or directory) //显示缺少此目录
nginx: configuration file /etc/nginx/nginx.conf test failed
//创建目录
[root@huangzhong sbin]# mkdir -pv /var/tem/nginx/client
//然后启动,并查看端口
[root@huangzhong sbin]# ./nginx
[root@huangzhong sbin]# netstat -tupln |grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10418/nginx
然后通过网页访问进行测试,看能否访问到,在访问前首先要关闭防火墙和selinux。
//关闭防火墙和selinux
[root@huangzhong sbin]# service iptables stop
[root@huangzhong sbin]# chkconfig iptables off //永久关闭
[root@huangzhong sbin]# setenforce 0
通过网页进行访问结果如下:
⑷实现代理功能
//编辑/etc/nginx目录下nginx.conf文件
[root@huangzhong ~]# vim /etc/nginx/nginx.conf
//关闭nginx服务,然后重新启动
[root@huangzhong ~]# pkill nginx
[root@huangzhong ~]# nginx
5. 验证测试
首先打开C盘下windows/system32/Drivers/etc目录下hosts文件,然后把192.168.2.101 www.tyedus.com加入保存关闭,然后通过网页进行访问结果如下:
四、nginx反向代理优化
Nginx反向代理优化其实就是对nginx反向代理进行加速缓存,而加速缓存的配置可以到nginx官网http://nginx.org中的功能模块中去参考样例配置文件。在这里进行配置如下:
//编辑/etc/nginx目录下nginx.conf文件
//创建编辑过程中所用到的目录
[root@huangzhong ~]# mkdir -pv /data/nginx/cache
//关闭nginx服务,然后在重新启动
[root@huangzhong ~]# pkill -9 nginx
[root@huangzhong ~]# nginx
//安装httpd-tools工具使用ab进行测试
[root@huangzhong ~]# yum install httpd-tools
//使用ab工具进行测试
[root@huangzhong ~]# ab -n 10000 http://192.168.2.101/index.html
没有配置加速缓存时测试的结果如下图1所示:
图1 没有配置加速缓存时测试的结果
安装配置加速缓存后测试的结果如下图2所示:
通过图1和图2对比可以看出使用加速缓存后访问请求次数远远大于没有加速缓存时的访问请求次数,并且请求时间大大的缩短了。