nginx+tomcat集群(五):nginx与tomcat实现负载均衡

通过前面的内容,现在环境都已经安装完毕,开始进入正题。

选择nginx与tomcat实现负载均衡的原因:

  • nginx是一个理论能够支持5W并发的服务器
  • nginx对静态资源的处理非常强大
  • tomcat是一个servlet容器,对动态页面支持的非常好
  • tomcat最多支持300并发后性能就开始下降

所以我们利用nginx的负载均衡可以水平扩展tomcat增加服务器并发处理能力,利用动静分离充分利用nginx和tomcat的性能。

  •  首先我们来实现负载均衡:

通过配置nginx.conf文件:

cd /usr/local/nginx/conf

vim nginx.conf

 下面是实现负载均衡的具体配置:


user root;

# 开启四个worker进程,比如你是四核cpu就开启四个
worker_processes 4;

# error_log  logs/error.log;
# error_log  logs/error.log  notice;
# error_log  logs/error.log  info;
error_log logs/error.log debug;

# pid        logs/nginx.pid;


events {
    # epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
    use epoll;

    # 每一个worker进程能并发处理(发起)的最大连接数(包含所有连接数)。不能超过最大文件打开数:在linux终端中输入ulimit -a进行查看
    worker_connections 65535;

    # 打开同时接受多个新网络连接请求的功能。
    multi_accept on;
}


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

    # 自定义日志格式,“main” 代表这个自定义格式在下面的access_log会用到,后面定义日志具体记载的内容,
    # $http_x_forwarded_for:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,例如做了CDN加速的就要添加,否则不知道用户真实ip
    log_format main  '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" $remote_addr';

    # Nginx访问日志,main代表使用上述定义main的日志格式记录日志
    access_log logs/access.log  main;

    # 设置为on表示启动高效传输文件的模式,开启这个参数后可以让数据不用经过用户buffer,直接在磁盘和tcp socket之间传输数据。
    sendfile on;
    # tcp_nopush     on;

    # keepalive_timeout  0;

    # 设置请求完成之后还要保持连接多久,不是请求时间多久,目的是保持长连接,减少创建连接过程给系统带来的性能损耗,类似于线程池,数据库连接池
    keepalive_timeout 35;

    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    # gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain applicaiton/javascript application/x-javascript application/css  text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary off;
    gzip_disable "MSIE [1-6]\.";

    # upstream tomcat_server{
    # server 127.0.0.1:8080;
    # }

    # cache begin
    proxy_buffering on;
    proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=my-cache:150m max_size=300m inactive=1d;
    proxy_temp_path /usr/local/nginx/nginx_temp;
    proxy_buffer_size 16k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    # cache end

    ## upstream模块是实现负载均衡的核心模块,通过配置upstreamName(tomcats),server地址(127.0.0.1:8080),负载方式(轮询|IP_HASH|第三方)实现基本的负载均衡功能。
    upstream tomcats {
        ## 默认使用轮询,权重是相同是1,代表两台服务器处理请求的概率相等
        server 127.0.0.1:8080 weight=1;
        server 127.0.0.1:8082 weight=1;
    }

    server {
        ## 监听端口
        listen 80;
        server_name www.abc.com;

        ## 设定请求缓存
        large_client_header_buffers 4 16k;
        client_max_body_size 300m;
        client_body_buffer_size 512k;
        proxy_connect_timeout 60;
        proxy_read_timeout 60;
        proxy_send_timeout 60;
        proxy_buffer_size 64k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;

        # charset koi8-r;

        # access_log  logs/host.access.log  main;

        ## location映射解析,匹配规则遵循正则表达式
        ## / 代表所有请求走这个配置
        location / {
            # root   html;
            # index  index.html index.htm;

            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;

            ## 这个走反向代理,表示所有请求都会走之前名字为tomcats的upstream模块
            proxy_pass http://tomcats;

            ## 如果连接超时1秒,自动走另一台服务器,实现故障转移
            proxy_connect_timeout 1;
            proxy_read_timeout 1;
            proxy_send_timeout 1;

        }

        ## ^~ /static/ 代表所有/static/的请求走这个配置
        location ^~ /static/ {
           
            ## 所有静态文件直接读取硬盘
            root /usr/local/tomcat-9_1/webapps;
            add_header X-Cache $upstream_cache_status;
            proxy_cache my-cache;
            proxy_cache_valid 200 12h;
            proxy_cache_valid 301 302 1m;
            proxy_cache_key $host$uri$is_args$args;
            expires 30d; # 缓存30天
        }

        location ~ /purge(/.*) {
            allow all;
            # 指定可以清除缓存的ip,all允许所有ip清除
            proxy_cache_purge my-cache $host$1$is_args$args;
        }

        location = /favicon.ico {
            log_not_found off;
            access_log off;
        }


        # 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;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        # location ~ \.php$ {
        # proxy_pass   http://127.0.0.1;
        # }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        # location ~ \.php$ {
        # root           html;
        # fastcgi_pass   127.0.0.1:9000;
        # fastcgi_index  index.php;
        # fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        # include        fastcgi_params;
        # }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        # location ~ /\.ht {
        # deny  all;
        # }
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    # server {
    # listen       8000;
    # listen       somename:8080;
    # server_name  somename  alias  another.alias;

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


    # HTTPS server
    # server {
    # listen       443 ssl;
    # server_name  localhost;

    # ssl_certificate      cert.pem;
    # ssl_certificate_key  cert.key;

    # ssl_session_cache    shared:SSL:1m;
    # ssl_session_timeout  5m;

    # ssl_ciphers  HIGH:!aNULL:!MD5;
    # ssl_prefer_server_ciphers  on;

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

}
                            

修改完毕后,检测配置文件是否正确,并重启:


## 检测Nginx配置文件是否正确
/usr/local/nginx/sbin/nginx -t

## 重启Nginx服务,使配置生效
/usr/local/nginx/sbin/nginx -s reload

启动两台tomcat,并修改webapps/ROOT/目录下的jsp文件,分别在开头加上8081和8082用来区分两台服务器。

nginx+tomcat集群(五):nginx与tomcat实现负载均衡_第1张图片

然后访问地址,按CTRL+R键刷新查看效果:

nginx+tomcat集群(五):nginx与tomcat实现负载均衡_第2张图片

以上说明负载均衡实现成功。

 


欢迎各位提出问题,互相探讨,共同进步。

你可能感兴趣的:(nginx,负载均衡,Tomcat)