您的位置:首页 > 运维架构 > Tomcat

Nginx+Tomcat 动静分离实现负载均衡

2017-07-20 16:13 627 查看
.1.一份Nginx.conf配置文件:

定义Nginx运行的用户 和 用户组 如果对应服务器暴露在外面的话建议使用权限较小的用户 防止被入侵  

# user www www;  

  

#Nginx进程数, 建议设置为等于CPU总核心数  

worker_processes 8;  

  

#开启全局错误日志类型  

error_log /var/log/nginx/error.log info;  

  

#进程文件  

pid /var/run/nginx.pid;  

  

#一个Nginx进程打开的最多文件描述数目 建议与ulimit -n一致  

#如果面对高并发时 注意修改该值 ulimit -n 还有部分系统参数 而并非这个单独确定  

worker_rlimit_nofile 65535;  

  

events{  

    #使用epoll模型提高性能  

    use epoll;  

    #单个进程最大连接数  

    worker_connections 65535;  

}  

  

http{  

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

    include mime.types;  

    #默认类型  

    default_type application/octet-stream;  

    sendfile on;  

    tcp_nopush on;  

    tcp_nodelay on;  

    keepalive_timeout 65;  

    types_hash_max_size 2048;  

    #日志  

    access_log /var/log/nginx/access.log;  

    error_log /var/log/nginx/error.log;  

    #gzip 压缩传输  

    gzip on;  

    gzip_min_length 1k;  #最小1K  

    gzip_buffers 16 64K;  

    gzip_http_version 1.1;  

    gzip_comp_level 6;  

    gzip_types text/plain application/x-javascript text/css application/xml application/javascript;  

    gzip_vary on;  

    #负载均衡组  

    #静态服务器组  

    upstream static.zh-jieli.com {  

        server 127.0.0.1:808 weight=1;  

    }  

    #动态服务器组  

    upstream zh-jieli.com {  

        server 127.0.0.1:8080;  

        #server 192.168.8.203:8080;  

    }  

    #配置代理参数  

    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 65;  

    proxy_send_timeout 65;  

    proxy_read_timeout 65;  

    proxy_buffer_size 4k;  

    proxy_buffers 4 32k;  

    proxy_busy_buffers_size 64k;  

    #缓存配置  

    proxy_cache_key '$host:$server_port$request_uri';  

    proxy_temp_file_write_size 64k;  

    proxy_temp_path /dev/shm/JieLiERP/proxy_temp_path;  

    proxy_cache_path /dev/shm/JieLiERP/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=5d max_size=1g;  

    proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;  

  

    server{  

        listen 80;  

        server_name erp.zh-jieli.com;  

        location / {  

            index index; #默认主页为 /index  

            #proxy_pass http://jieli;  

        }  

        location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {  

            proxy_cache cache_one;  

            proxy_cache_valid 200 304 302 5d;  

            proxy_cache_valid any 5d;  

            proxy_cache_key '$host:$server_port$request_uri';  

            add_header X-Cache '$upstream_cache_status from $host';  

            proxy_pass http://static.zh-jieli.com;  

            #所有静态文件直接读取硬盘  

            #           root /var/lib/tomcat7/webapps/JieLiERP/WEB-INF ;  

            expires 30d; #缓存30天  

        }  

        #其他页面反向代理到tomcat容器  

        location ~ .*$ {  

            index index;  

            proxy_pass http://zh-jieli.com;  

        }  

    }  

    server{  

        listen 808;  

        server_name static;  

        location / {  

  

        }  

        location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {  

            #所有静态文件直接读取硬盘  

            root /var/lib/tomcat7/webapps/JieLiERP/WEB-INF ;  

            expires 30d; #缓存30天  

        }  

    }  

}  

     基本配置这个文件,就可以实现负载了。但是里面的各种关系要了解就比较麻烦了。这篇博客,也不是教学篇,是记录一下,方便以后自己看了。

2.基础讲解

  现在假使有一台电脑192.168.8.203这台电脑,上面部署了Tomcat,里面8080端口有J2EE的服务,通过浏览器可以正常浏览网页。现在有一个问题tomcat是一个比较全面的web容器,对静态网页的处理,应该是比较费资源的,特别是每次都要从磁盘读取静态页面,然后返回。这中间会消耗Tomcat的资源,可能会使那些动态页面解析性能影响。秉承Linux哲学,一个软件只做一件事的原则。Tomcat就应该只处理JSP动态页面。这里就用到以前了解的Nginx来进行反向代理。第一步代理,实现动静网页分离。这个很简单的。

worker_processes 8;  

          

        pid /var/run/nginx.pid;  

          

        worker_rlimit_nofile 65535;  

          

        events{  

            use epoll;  

            worker_connections 65535;  

        }  

          

        http{  

            include mime.types;  

            default_type application/octet-stream;  

            sendfile on;  

            tcp_nopush on;  

            tcp_nodelay on;  

            keepalive_timeout 65;  

            types_hash_max_size 2048;  

  

            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 65;  

            proxy_send_timeout 65;  

            proxy_read_timeout 65;  

            proxy_buffer_size 4k;  

            proxy_buffers 4 32k;  

            proxy_busy_buffers_size 64k;  

          

            server{  

                listen 80;  

                server_name xxx.com;  

                location / {  

                    index index;   

                }  

                location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {  

                    proxy_pass http://192.168.8.203:8080;  

                    expires 30d;   

                }  

                location ~ .*$ {  

                    index index;  

                    proxy_pass http://192.168.8.203:8080;  

                }  

            }  

        }

修改nginx的配置文件 /etc/nginx/nginx.conf 默认有个配置文件的。其实大部分都差不多,关键还是server段的设置。这里我设置server段如上所示,其他段复制就可以了。server段里面的解释如下:第35行为监听本机80端口。37-39行表示默认主页,这里的默认主页我是index.jsp 对应到我项目中是一个index。 这里根据需要可以改为

index index.jsp index.html index.htm index.php  

具体可参考其他文章。 关键的第40行,这个是正则匹配,网上也有很多介绍。这里匹配我项目中用到的所有静态网页后缀。第41行是代理地址。这里我代理到我的web应用中。expires 30d缓存为30天,这里的缓存是对应到前端页面,用户的Cache-Control字段,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx