负载均衡-软负载-nginx|+tomcate+win

参考地址:

   http://www.chinanginx.cn/?page_id=227   nginx中文官网

   http://www.nginx.cn/2181.html

   http://cxshun.iteye.com/blog/1535188

   http://ari.iteye.com/blog/833153

   http://www.cnblogs.com/xiaogangqq123/archive/2011/03/04/1971002.html

要求配置nginx主从关系可以参考:

   http://www.server110.com/nginx/201309/1309.html

环境:Window + Nginx+Tomcat6

1、nginx简介:

     Nginx (发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。  其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、 腾讯,另外知名的微网志Plurk也使用nginx。

2、下载地址:http://nginx.org/ ,文章附件有下载。

3、本文主要基于Nginx下配置两台tomcat,结构如下图:

3、目录结构
      Nginx-

               |_  conf   配置目录

               |_  contrib

               |_  docs 文档目录

               |_  logs  日志目录

               |_  temp 临时文件目录

               |_  html 静态页面目录

               |_  nginx.exe 主程序

     window下安装Nginx极其简单,解压缩到一个无空格的英文目录即可(个人习惯,担心中文出问题),双击nginx.exe启动。  
也可以在dos目录下启动、跟新、停止,我的nginx是在D:\nginx-1.5.8路径下,dos下操作如下图:

     启动:

     停止:

    重新加载文件:当修改了nginx文件,如配置文件。。。。。如果nginx开着不需要关闭服务器重启,直接执行该命令重新加载文件就可以了。

    启动后我们打开任务管理器,可以看到两个nginx.exe在那里好好的。这说明我们已经启动了,至于为什么两个,我们这里不深究,在浏览器中输入:http://localhost可以看到如图,说明启动成功。

4、nginx.conf配置文件说明
   Nginx配置文件默认在conf目录,主要配置文件为nginx.conf,我们安装在D:\nginx-1.5.8、默认主配置文件 为D:\nginx-1.5.8\conf\nginx.conf。下面是nginx作为前端反向代理服务器的配置。

   dome里一个server的说明:

  server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
     这段代码在server里面,相当于一个代理服务器,可以配置多个,但是端口listen必须配置不一样。

     listen:表示当前的代理服务器监听的端口,默认的是监听80端口。注意,如果我们配置了多个server,这个listen要配置不一样,不然就不能确定转到哪里去了。

     server_name:表示监听到之后需要转到哪里去,这时我们直接转到本地;
     location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里

     root:里面配置了root这时表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件,这里对我们之后的静态文件伺服很有用。

    

     index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推。

下面的error_page是代表错误的页面,这里我们暂时不用,先不管它。

     server_name:表示监听到之后需要转到哪里去,这时我们直接转到本地;      location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里    5、自己配置最简单的转发:
worker_processes  1;

events {
    worker_connections  1024;
}

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

    sendfile        on;
	
    server {
        listen       80;
		server_name  localhost;
		 
        location / {
            proxy_pass http://127.0.0.1:8013/nginxTest/index.jsp;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
     proxy_pass,它表示代理路径,相当于转发,而不像之前说的root必须指定一个文件夹;       配置完成后输入:http://localhost 可以进入 proxy_pass指定的页面,表示成功;

     6、自己配置一台负载均衡机器,负载两台服务器:

#Nginx所用用户和组,window下不指定
#user  nobody;

#工作的子进程数量(通常等于CPU数量或者2倍于CPU)
worker_processes  2;

#错误日志存放路径
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#指定pid存放文件
#pid        logs/nginx.pid;

events {
	#使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue,window下不指定。
	#use epoll; 
	
	#允许最大连接数  
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8;
	
	#定义日志格式
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
	
	#跳转服务的别名
	#upstream 指定负载均衡的机器服务器地址,这里我们我们用没有多台机器,用不同的端口来区分;
	upstream nginxTestUrl { 
		#weigth 参数表示权值,权值越高被分配到的几率越大,可以不配
		server	192.168.3.189:8013 weight=1;
		server  192.168.3.189:8023 weight=1; 
		
		#ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,不需要可以不配
		#ip_hash;
    }  
	
    server {
        listen       80;
        server_name  localhost;
		
        #access_log  logs/host.access.log  main;

        location / {
			#proxy_pass 随机转向到配置的服务器上,配置形式直接用http://+upstream的名称来使用
			#upstream中的server元素必须要注意,不能加http://,但proxy_pass中必须加
            proxy_pass http://nginxTestUrl;
			
			#proxy_redirect proxy_set_header 必须配置,不然如果后端真是的服务器设置有类似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,
			#如果反向代理层的nginx不重写请求头中的host字段,将会导致请求失败在查找项目的时候会找不到资源
			#说明链接:http://zhidao.baidu.com/link?url=Ify6aPe0tTcOlLuO2zuYkLIH_ITT-aThzXVIFf3yTFOKpcF314SQyrcYY5j0Awk4xU6Qb0JSaDESLBoKKnIVuK
			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   1;	#nginx跟后端服务器连接超时时间(代理连接超时),时间设置短一些可以解决多台服务器突然出现的某一台down机器引起的链接超时
			proxy_send_timeout      300;	#后端服务器数据回传时间(代理发送超时)
			proxy_read_timeout      300;	#连接成功后,后端服务器响应时间(代理接收超时)
			proxy_buffer_size       4k;	#设置代理服务器(nginx)保存用户头信息的缓冲区大小
			proxy_buffers           4 32k;	#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
			proxy_busy_buffers_size 64k;	#高负荷下缓冲大小(proxy_buffers*2)
			proxy_temp_file_write_size 64k;	#设定缓存文件夹大小,大于这个值,将从upstream服务器传
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

    设置反向代理的时间可以解决因某台服务去down机而引起的链接超时问题:

        proxy_connect_timeout 1;
        proxy_send_timeout 30;
        proxy_read_timeout 60;

猜你喜欢

转载自x125858805.iteye.com/blog/2194001