本文主要讲如何通过nginx建立内网tomcat7的负载均衡服务。
先看个简单的nginx转发的例子:访问nginx的80端口时,转发到192.168.1.101:8080。
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.1.101:8080; //局域网内的一个应用
proxy_redirect off;
proxy_set_header Host $host; //主机名
proxy_set_header X-Real-IP $remote_addr; //remote_addr真实的访问者IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; //传入的X-Forwarded-For header
}
其他省略...
}
如果服务压力大,我们会通常建立负载均衡服务器,也就是nginx做入口,nginx把请求转发到多个真实的处理服务器上。这里需要引入一个ngxin的概念,upstream;那么如何建立一个负载均衡服务器呢?配置如下:
upstream pool { //upstream就是资源池的概念。
server 192.168.1.101:8081;
server 192.168.1.101:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://pool ; //这里的转发修改为池
proxy_redirect off;
proxy_set_header Host $host; //主机名
proxy_set_header X-Real-IP $remote_addr; //remote_addr真实的访问者IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; //传入的X-Forwarded-For header
}
其他省略...
}
这里访问http://nginx/服务时,实际上会由http://192.168.1.101:8081/与http://192.168.1.101:8080/ 两个池中的资源进行详细的业务处理。但是大家可能遇到一个问题:配置为资源池后,会出现nginx服务无法正常访问的问题。这个问题会出现在tomcat原始服务器绑定在内网IP上的应用上。
----------------------------------------------------------解决方案-----------------------------------------------------
查看192.168.1.101:8081对应的tomcat的conf下的server.xml配置。
<Engine name="Catalina" defaultHost="192.168.1.101"> //这里原始配置为localhost,修改为绑定host-name
//中间采用原来的..............
<Host name="192.168.1.101" appBase="webapps" //这里配置ip,则此tomcat的webapps下面的资源只会通过此ip进行访问
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
--修改后,重启tomcat后,再测试nginx访问就可以正常的访问了!