版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq877507054/article/details/69547590
目的:实现高性能负载均衡的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