如何配置Nginx做高可用

2016-02-25 11:01

操作系统: Linux

服务器: tomcat7

nginx版本:1.6.0


        nginx是一个高性能的http和反向代理服务器,因其稳定性、丰富的功能性、以及低能耗被广泛采用。本文将示范在fedora16上配置安装nginx,并且整合tomcat做服务器负载均衡配置。


Nginx 安装

从官网下载Nginx包  http://nginx.org/en/download.html

在终端su进入root用户(必须以root权限安装,因为安装路径为/usr/local,普通权限无法对该位置的文件进行写操作)。

1.tar -zxvf nginx-1.6.0.tar.gz

2.cd nginx-1.6.0

3../configure--with-http_stub_status_module --with-http_ssl_module--prefix=/usr/local/nginx
   这行命令执行后,可能会提示 ./configure: error: the HTTP rewritemodule requires the PCRE library.这个错误,是缺少pcre 包,可用yum install pcrepcre-devlel来解决

4.make && make install

安装成功的话,安装目录为 /usr/local/nginx

       测试是否安装成功,在终端中执行usr/local/nginx/sbin/nginx, 然后在浏览器中输入localhost,若出现 welcome to nginx 则表示安装成功。

       若要关闭Nginx,则在终端中 ps aux | grep nginx  ,然后kill 掉相关进程即可。或者输入 usr/local/nginx/sbin/nginx -s stop来停止,该命令 -s 表示将signal 发送到nginx主进程中。



Nginx配置

        Nginx 的配置主要是修改 /usr/local/nginx/conf/nginx,conf文件

#配置用户和用户组

user www www;

#工作进程数,建议设置为CPU的总核数

worker_processes  2;

#全局错误日志定义类型,日志等级从低到高依次为: debug | info | notice | warn | error | crit

error_log  logs/error.log  info;

#记录主进程ID的文件

pid        /usr/local/nginx/nginx.pid;

#一个进程能打开的文件描述符最大值,理论上该值因该是最多能打开的文件数除以进程数。但是由于nginx负载并不是完全均衡的,

#所以这个值最好等于最多能打开的文件数。执行 sysctl -a | grep fs.file 可以看到linux文件描述符。

worker_rlimit_nofile 65535;

#工作模式与连接数上限

events {

    #工作模式,linux2.6版本以上用epoll

    use epoll;

    #单个进程允许的最大连接数

    worker_connections  65535;
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持

http {

    #文件扩展名与文件类型映射表

    include       mime.types;

    #默认文件类型

    default_type  application/octet-stream;

    #日志格式

    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 记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息

    access_log  logs/access.log  main;

    #服务器名字的hash表大小

    server_names_hash_bucket_size 128;


    #客户端请求头缓冲大小。nginx默认会用client_header_buffer_size这个buffer来读取header值,
    #如果header过大,它会使用large_client_header_buffers来读取。

    #如果设置过小HTTP头/Cookie过大 会报400 错误 nginx 400 bad request
    #如果超过buffer,就会报HTTP 414错误(URI Too Long)
    #nginx接受最长的HTTP头部大小必须比其中一个buffer大,否则就会报400的HTTP错误(Bad Request)。

    client_header_buffer_size 32k;

    large_client_header_buffers 4 32k;

    #客户端请求体的大小

    client_body_buffer_size    8m;

    #隐藏ngnix版本号

    server_tokens off;

    #忽略不合法的请求头

    ignore_invalid_headers   on;

    #指定启用除第一条error_page指令以外其他的error_page。

    recursive_error_pages    on;

    #让 nginx 在处理自己内部重定向时不默认使用  server_name 设置中的第一个域名

    server_name_in_redirect off;

    #开启文件传输,一般应用都应设置为on;若是有下载的应用,则可以设置成off来平衡网络I/O和磁盘的I/O来降低系统负载

    sendfile                 on;

    #告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。

    tcp_nopush     on;

    #告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,

    #这样发送一小块数据信息时就不能立即得到返回值。

    tcp_nodelay    on;

    #长连接超时时间,单位是秒

    keepalive_timeout  65;

    #gzip模块设置,使用 gzip 压缩可以降低网站带宽消耗,同时提升访问速度。

    gzip  on;             #开启gzip

    gzip_min_length  1k;          #最小压缩大小

    gzip_buffers     4 16k;        #压缩缓冲区

    gzip_http_version 1.0;       #压缩版本

    gzip_comp_level 2;            #压缩等级

    gzip_types       text/plain application/x-javascript text/css application/xml;           #压缩类型

    #upstream作负载均衡,在此配置需要轮询的服务器地址和端口号,max_fails为允许请求失败的次数,默认为1.

    #weight为轮询权重,根据不同的权重分配可以用来平衡服务器的访问率。

    upstream hostname {

        server 192.168.2.149:8080 max_fails=0 weight=1;

        server 192.168.1.9:8080 max_fails=0 weight=1;

    }

    #主机配置

    server {

        #监听端口

        listen       80;

        #域名

        server_name  hostname;
        #字符集
        charset utf-8;
        #单独的access_log文件
        access_log  logs/192.168.2.149.access.log  main;
        #反向代理配置,将所有请求为http://hostname的请求全部转发到upstream中定义的目标服务器中。
        location / {

            #此处配置的域名必须与upstream的域名一致,才能转发。

            proxy_pass     http://hostname;

            proxy_set_header   X-Real-IP $remote_addr;

        }

        #启用nginx status 监听页面

        location /nginxstatus {

            stub_status on;

            access_log on;

        }

        #错误页面

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;
        }

    }

}

        至此,nginx基本的负载均衡配置完成,实验中部署2台tomcat, 然后访问时返回不同的结果,在浏览器中输入地址,确实能看到不同的返回结果。nginx配置文件的内容还有待于继续学习。


 4、Tomcat配置


   对于tomcat大家都很熟悉,只需要修改server.xml配置文件即可,这里我们以apache-tomcat-6.0.14为例,分别在server目录,解压缩并命名为:apache-tomcat-6.0.14_1、apache-tomcat-6.0.14_2。


    第一处端口修改:

Xml代码  收藏代码

  1. <!--  修改port端口:18006 俩个tomcat不能重复,端口随意,别太小-->  

  2. <Server port="18006" shutdown="SHUTDOWN">  

 
   第二处端口修改:

Xml代码  收藏代码

  1. <!-- port="18081" tomcat监听端口,随意设置,别太小 -->  

  2. <Connector port="18081" protocol="HTTP/1.1"   

  3.                connectionTimeout="20000"   

  4.                redirectPort="8443" />  

  5.   

  6.    

 

   第三处端口修改:

Java代码  收藏代码

  1. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />  

 

   Engine元素增加jvmRoute属性:

Xml代码  收藏代码

  1. <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">  

 
    两个tomcat的端口别重复,保证能启动起来,另一个tomcat配置希捷省略,监听端口为18080,附件中我们将上传所有的配置信息。