
反向代理方式是指以反向代理服务器来接受互联网上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给互联网上请求连接的客户端,此时反向代理服务器对外就表现为一个服务器。让互联网上的主机通过不同的域名访问不同的内部网主机资源,使内部网主机免受外部网主机攻击,实现负载均衡和缓存功能,很大程度上减轻web服务器的负担,提高访问速度。这些都需要使用反向代理来实现。
实现方案:
对公司服务器做nat映射到本机192.168.162.54,这样从就能访问到内网的本机。再由本机做反向代理服务器,使得内网其他机子上的服务可以通过本机的代理让用户访问。能够实现反向代理的软件有很多,比如apache,squid,nginx。这里选择了比较新的nginx,用nginx做反向代理有支持高并发,稳定,配置简洁等优点。
实验中用本机的80和端口做反向代理服务器,其他的不同端口和虚拟机来模拟内网中的其他服务器,以此前提进行实验。
实现步骤:
本机windows7系统,安装nginx-0.8.54用来作为反向代理服务器,作用户访问的入口,监听80.81,82,端口。后台放置两个tomcat分别部署在8080和8081端口。虚拟机win2003的iis在90端口发布。
主机地址192.168.162.54,虚拟机地址192.168.40.128
一、通过不同的端口访问不同的服务器
在nginx-0.8.54/conf下添加proxy.conf
内容为
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
在nginx.conf中添加配置
include proxy.conf;
server { listen 80; server_name www.a111.com; location / { proxy_pass http://192.168.162.54:8080; }}
server { listen 81; server_name www.a222.com; location / { proxy_pass http://192.168.162.54:8081; }}
server { listen 82; server_name www.a333.com; location / { proxy_pass http://192.168.40.128:90;}}
实现反向代理
在windows/system32/drivers/ect/hosts中
添加192.168.10.162 www.a111.com 实现域名解析
测试输入www.a111.com
www.a111.com:81
www.a111.com:82
输入www.a111.com/calc2/ 通过80端口访问tomcat在8080端口下的应用
输入www.a111.com:81/inter/ 通过80端口访问tomcat在8081端口下的应用
这样就是实现了通过不同的端口访问不同的服务器。
二、通过不同的下级目录访问不同的服务器
在之前配置的nginx.conf中的
server { listen 80; server_name www.a111.com; location / { proxy_pass http://192.168.162.54:8080; }}部分扩展为
server { listen 80; server_name www.a111.com;
location / { proxy_pass http://192.168.162.54:8080;}
location /A2/ { proxy_pass http://192.168.162.54:8081;}
location /A3/ { proxy_pass http://192.168.40.128:90;}
}
输入
http://www.a111.com/A1/
http://www.a111.com/A2/
http://www.a111.com/A3/
实现同一端口80通过不同的下级目录访问不同的服务器
三、实现负载均衡
在nginx.conf中的 http 模块里添加
upstream myCluster {
server 127.0.0.1:8080 ;
server 127.0.0.1:8081 ;}
表示这个server cluster包含2台服务器
然后在server模块中添加访问同一页面的负载均衡
server {listen ;server_name localhost;
location ~ \\.jsp$ {
proxy_pass http://myCluster ;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
以端口来做实验,为了区分是访问不同的服务器。虽然两个tomcat的hello文件夹下都有hello.jsp可是他们的内容不同。结果如下,每次刷新会切换一次服务器。
如图:
可通过修改upstream myCluster {
server 127.0.0.1:8080 weight=5 ;
server 127.0.0.1:8081 ;}
来改变服务器权重。
四、根据客户端的不同ip访问不同服务器
在nginx.conf中加入模块:
geo $geo {
default default;
192.168.163.0/24 aa;
192.168.162.0/24 bb;
}
upstream aa.server {
server http://192.168.40.128:90;
}
upstream bb.server {
server 192.168.162.54:8080;
}
upstream default.server {
server 192.168.162.54:8081;
}
server { listen 84;server_name www.a999.com;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://$geo.server$request_uri;
}
}
使得192.168.163.x 网段的ip访问虚拟机的90端口
192.168.162.x网段的ip访问8080 端口
其他ip访问8081端口
实现不同的ip访问不同的服务器
在192.168.163.37的访问结果:
在192.168.162.54的访问结果:
