Nginx 服务器 之Nginx与tomcat实现负载均衡 

本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡。

一、nginx与tomcat实现负载均衡

1、在/usr/local/ngnix/conf  创建文件 nginx-tomcat.conf

文件内容:

user  nobody;
worker_processes  2;
events {   
    worker_connections  1024;    
}
http{
    # upstream 配置一组后端服务器,
    # 请求转发到upstream后,nginx按策略将请求指派出某一服务器
    # 即配置用于负载均衡的服务器群信息
    upstream tomcats{
        fair;
        server 121.42.41.143:8080;
        server 219.133.55.36;
    }
    server {
        listen       80;
        server_name  121.42.41.143;
        access_log  logs/tomcat-nginx.access.log  combined;
        # 反向代理设置,将所有/路径下请求发给本机上的tomcat
        location / {
            #root   html;
            index  index.html index.htm;
            #==========Nginx提供的代理============
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://tomcats;
        }
   }
}

2、使用该配置文件启动nginx (启动前先关闭nginx)

    [root@iZ28b4kreuaZ bin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx-tomcat.conf

二、配置文件详解:

worker_processes  2;

events {   
    worker_connections  1024;    
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    # upstream 配置一组后端服务器,
    # 请求转发到upstream后,nginx按策略将请求指派出某一服务器
    # 即配置用于负载均衡的服务器群信息
    upstream backends {
        #=========均衡策略=============
        #none 轮询(权重由weight决定)
        #ip_hash  通过hash算法将用户的请求与第一次请求的服务器进行绑定,后续该用户所有的请求都将被分配到该服务器上。除非该服务器挂掉。
        #==============  第三方 均衡策略===========
        #fair  根据各个服务器的性能的不同,自动选择使用响应能力强的服务器。
        #url_hash 根据url选择服务器。 

        #===============服务器集==============
        server 192.168.1.62:8080;
        server 192.168.1.63;
        
        #==========weight权重策略:权重值越高负载越大==========
        # server 192.168.1.64 weight=5;

        
        #===============backup:备份机,只有非备份机都挂掉了才启用===============
        server 192.168.1.64 backup;
        
        #==============down: 停机标志,不会被访问(对临时维护的服务器设置)=============
        server 192.168.1.65 down;

        # max_fails:达到指定次数认为服务器挂掉;
        # fail_timeout:挂掉之后过多久再去测试是否已恢复
        server 192.168.1.66 max_fails=2 fail_timeout=60s;
    }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        
        # 反向代理设置,将所有/proxy_test/路径下请求发给本机上的tomcat
        location /proxy_test/ {
            proxy_pass http://localhost:8080;
        }
        
        # 负载均衡设置,将所有jsp请求发送到upstream backends指定的服务器群上
        location ~ \.jsp$ {
            proxy_pass http://backends;
            
            # 真实的客户端IP
            proxy_set_header   X-Real-IP        $remote_addr; 
            # 请求头中Host信息
            proxy_set_header   Host             $host; 
            # 代理路由信息,此处取IP有安全隐患
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            # 真实的用户访问协议
            proxy_set_header   X-Forwarded-Proto $scheme;
            # 默认值default,
            # 后端response 302时 tomcat header中location的host是http://192.168.1.62:8080
            # 因为tomcat收到的请求是nginx发过去的, nginx发起的请求url host是http://192.168.1.62:8080
            # 设置为default后,nginx自动把响应头中location host部分替换成当前用户请求的host部分
            # 网上很多教程将此值设置成 off,禁用了替换,
            # 这样用户浏览器收到302后跳到http://192.168.1.62:8080,直接将后端服务器暴露给浏览器
            # 所以除非特殊需要,不要设置这种画蛇添足的配置
            proxy_redirect default;
        }
        
        # 一个url重写的例子,浏览器请求 /page.go时,url被重写成/test/page.jsp
        location ~ \.go$ {
            rewrite ^(.*)\.go$ /test/$1\.jsp last;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
}
View Code

相关文章: