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

Nginx+Tomcat集群配置讲解

2017-04-07 14:48 836 查看
目的:实现高性能负载均衡的Tomcat集群



在linux上安装好niginx后进入conf文件夹下编辑nginx.conf文件,文件配置讲解如下

<!--nginx进程数,建议设置为等于CPU总核心数-->
worker_processes  8;
<!--错误日志存放路径 -->
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
<!--指定pid存放文件-->
pid        logs/nginx.pid;

events {
<!--单个进程最大连接数,那么该服务器的最大连接数=连接数*进程数-->
worker_connections  1024;
}

<!-----------------------------------------设定http服务器,利用它的反向代理功能提供负载均衡支持------------------------------>
http {
<!--设定mime类型-->
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  logs/access.log  main;

<!--开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。-->
sendfile        on;

<!--长连接超时时间,单位是秒-->
keepalive_timeout  65;

<!--启用Gizp压缩 访问网站的时候nginx检查有木有压缩文件,提高网站性能-->
gzip  on;

<!--#################################################以下为核心配置####################################-->
<!--#################################################服务器的集群配置#################################-->
<!--website为集群的服务器列表的名字, website和proxy_pass保持一样 ,最终请求会被转发到这里来-->
upstream website
{
#ip_hash;<!--可选,根据来源IP方式选择web服务器,省略的话按默认的轮循方式选择web服务器,解决Session每次访问页面都不一样,让用户的请求只在一个服务上使用,在同一个server中保持一个稳定的session-->

server 192.168.27:8080  weight=1
server 192.168.28:8080  weight=2
<!--server:配置tomcat服务器请求的地址,2台Tomcat服务就配置2个server,可以用weight参数设置权重,即访问的几率,server后的ip即使tomcat的ip,weight表示权重,weight越大,对应服务器被访问的概率越大,若是相等,几个服务器轮流被访问;假如我们启动tomcat1(27服务器),tomcat2(28服务器),nginx(27服务器),在浏览器中输入192.168.27(niginx所在的服务器),然后刷新,这时我们会看到tomcat1和tomcat2的页面交替显示,这就表示nginx已经负载了两个tomcat,可以将请求转发到不同的tomcat。-->

<!--nginx 的upstream目前支持的几种方式的分配1.轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。2.weight:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 3.ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,ip_hash其实上不能够完全解决ip问题,因为有很多用户的ip随时都可能在变动,ip_hash这个名字你就知道,是通过hash散列的原理将用户的ip散列到指定的tomcat上,自然而然的想当然的解决了session问题,最好是用memcached存取来实现session共享-->

}

<!--#################################################当前的nginx的配置#############################-->

server {
listen       80; <!--监听端口,一般都为http端口:80;-->

<!--当前服务的域名,域名可以有多个,用空格隔开:例如 server_name www.sohu.com baidu.com;-->
server_name  localhost www.cgfytop.com;

location / {

<!--设置一个代理,请求转向自定义的服务器列表,这里我们将请求都转向标识为http://website;的负载均衡服务器列表;如果我们访问localhost:8,或者www.cgfytop.com:80,则交给名称为website的nginx集群来处理-->
proxy_pass http://website; 
<!--proxy_set_header设置客户端ip和端口等信息-->
proxy_set_header     Host               $http_host;
proxy_set_header     X-Real-IP          $remote_addr;
proxy_set_header     X-Forwarded-For    $proxy_add_x_forwarded_for;

<!--下面的配置可以解决2个Tomcat服务器集群,当一台服务器挂掉(宕机)后,请求变得很慢的问题,(Tomcat集群一台服务器挂掉后请求变慢解决方案)-->
proxy_connect_timeout       1;
proxy_read_timeout          1;
proxy_send_timeout          1;
}

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

<!--此为默认配置,需修改成以上的配置-->
<!--location/{}:对什么样的后缀进行负载均衡请求,假如我们要对所有的aspx后缀的文件进行负载均衡时,可写成:location ~ .*\.aspx$ {}-->

<!--location / {root   html;index  index.html index.htm;}-->

}

<!----------------------------------------设定http服务器结束--------------------------------------------->

<!--include /usr/local/nginx/conf/conf.d/*.conf; include可以模块化配置文件-->

}

这段脚本放在server{}里可判断用户请求的具体设备,是手机端还算是电脑端

set $mobile_rewrite 0;

if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|arm|KFAPWI") {
set $mobile_rewrite 1;
}

if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-)") {
set $mobile_rewrite 1;
}


proxy的详细配置

 proxy_redirect          off;
    proxy_set_header        Host $host;
    proxy_set_header        X-Real-IP $remote_addr; #获取真实IP
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for; #获取代理者的真实ip
    proxy_connect_timeout   30s;
    proxy_send_timeout      60s;
    proxy_read_timeout      150s;
    proxy_buffer_size       16k;
    proxy_buffers           8 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_ignore_client_abort on;
    #proxy_http_version 1.1;
    #proxy_set_header Connection "";
    #proxy_next_upstream off;
    proxy_next_upstream error invalid_header http_500 http_502 http_503 http_504;


gzip详细配置

gzip  on;
gzip_http_version 1.1;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_comp_level  2;
gzip_types       text/plain application/x-javascript text/css text/xml application/xml text/javascript application/json;
gzip_disable "MSIE [1-6]\.";
gzip_vary  on;

设定请求缓冲

#设定请求缓冲
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;


参考的典例文档

添加Nginx对于静态文件的缓存配置
nginx的安装配置
nginx的win系统下的部署
浅谈web应用的负载均衡、集群、高可用(HA)解决方案
nginx+tomcat+memcached负载均衡集群搭建1
nginx+tomcat+memcached负载均衡集群搭建2
tomcat与nginx的配置1
tomcat与nginx的配置2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: