nginx反向代理和负载均衡

来源:互联网 发布:mac重装没有磁盘 编辑:程序博客网 时间:2024/05/19 17:10
一、反向代理
      通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理 服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的。
      而反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
正向代理:

反向代理:

二、nginx+tomcat反向代理配置
环境准备:两台centos6.5,为了方便,这里我一台是同时存放nginx和tomcat的,ip192.168.1.110,另一台只有tomcat ip为192.168.1.111
分别在上面解压tomcat,并测试可以成功启动(即浏览器可以成功访问ip:8080),注意防火墙必须开放8080
安装nginx步骤就不说了 可参考其他文章
修改nginx安装目录下conf/nginx.conf,增加如下:



注意下面的proxy_pass对应的代理服务器名是与上面upstream的名字对应
    #配置代理服务器即tomcat    upstream tomcat_server1{        server 192.168.1.111:8080;    }    upstream tomcat_sercer2{        server 192.168.1.110:8080;    }    server {        listen       80;        server_name  howard.nginx1.com;        #charset koi8-r;        #        #access_log  logs/host.access.log  main;        #        location / {              proxy_pass    http://tomcat_server1;              index  index.html index.htm;        }   }    server {        listen       80;        server_name  howard.nginx2.com;        #charset koi8-r;        #        #access_log  logs/host.access.log  main;        #        location / {              proxy_pass   http://tomcat_server2;              index  index.html index.htm;        }   }
分别修改两台主机tomcat下webapps/ROOT/index.jsp的内容,使用tomcat1和tomcat2两个服务首页显示不同的内容(可通过vim下/h1查找h1标签修改tomcat标题)
如:




接着,由于使用域名进行区分,这里用通过修改windows的host文件来模拟不同域名与ip的映射
window的host文件路径:C:\Windows\System32\drivers\etc
这里为了方便,我使用switchHost工具进行修改:

增加2条域名与ip的映射,注意这里映射的ip是nginx所在的ip,因为反向代理我们是把请求发送到nginx,由nginx替我们确定具体的服务器。
在这里,nginx并不充当真正的服务器角色,只是个代理服务器,真正的服务器是两台tomcat。
启动两台机器上的tomcat,重启nginx。
./nginx -s reload
在浏览器分别输入http://howard.nginx1.com/和http://howard.nginx2.com/



由上面可以看出http://howard.nginx1.com/ 访问的是192.168.1.111下的tomcat
http://howard.nginx2.com/访问的是192.168.1.110下的tomcat
三、nginx+tomcat负载均衡配置
负载均衡的配置其实跟上面的反向代理差不多。负载均衡就是为了缓解服务器压力,将同个请求分发到不同服务器,让不同服务器处理。即多个服务器的内容是一样的,但是ip不一样。比如淘宝,肯定不止一个服务器,那么当同个域名请求淘宝时,nginx代理服务器就负责在多个服务器之间选择一个来处理这个请求,这样就不用一个服务器处理所有的请求了。最简单的就是轮询方式,即多个服务器按顺序轮询来处理请求。
配置过程:
使用两台tomcat,这里可以利用上面反向代理配置的两台tomcat来完成。
这里是使用同个域名进行访问,由nginx分配到不同服务器进行处理。
修改nginx安装目录下conf/nginx.conf,增加如下:



    upstream tomcats{        server 192.168.1.110:8080;        server 192.168.1.111:8080;    }    server {        listen       80;        server_name  howard.nginx3.com;        #charset koi8-r;        #        #access_log  logs/host.access.log  main;        #        location / {              proxy_pass  http://tomcats;              index  index.html index.htm;        }   }
同理。在windows的host文件增加howard.nginx3.com到nginx所在机器的映射

启动两台机器的tomcat,刷新nginx的配置:
./nginx -s reload
在浏览器输入:http://howayord.nginx3.com/
刷新多次,可看到有时候访问的是192.168.1.110上的tomcat,有时候访问的是192.168.1.111上的tomcat



默认这两台tomcat的权重是一样的,即交给任何一台处理的概率一样。
当然,有时候服务器的性能可能不一样,好的服务器可能可以多处理一些请求,所以nginx也可以为他们指定权重。
修改nginx.conf下:
    upstream tomcats{        server 192.168.1.110:8080;        server 192.168.1.111:8080;    }

改为:
    upstream tomcats{        server 192.168.1.110:8080 weight=2;        server 192.168.1.111:8080;    }
这时再次尝试,则192。168.1.110这台处理的概率高些。
原创粉丝点击