`

Nginx+Tomcat负载均衡配置

 
阅读更多

参考文件:

Nginx+Tomcat负载均衡配置 : http://blog.csdn.net/wave_1102/article/details/44475093
参考:http://blog.csdn.net/wave_1102/article/details/44475093

 

理论:

【Nginx 和 Apache 各有什么优缺点?】
可参考一些文章:
http://www.cnblogs.com/huangye-dream/p/3550328.html
https://www.zhihu.com/question/19571087
nginx 相对 apache 的优点:
(1) 轻量级,同样起web 服务,比apache 占用更少的内存及资源抗并发,
(2) nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能高度模块化的设计,编写模块相对简单社区活跃,各种高性能模块出品迅速啊
apache相对nginx 的优点:
rewrite(URL重写) ,比nginx 的rewrite 强大模块超多,基本想到的都可以找到少bug ,nginx 的bug 相对较多超稳定存在就是理由,
一般来说,
(1)如果需要性能的web 服务,用nginx
(2)如果不需要性能只求稳定,那就apache。apache的各种功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。
注意:epoll(freebsd 上是 kqueue )网络IO 模型是nginx 处理性能高的根本理由,但并不是所有的情况下都是epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache 的select 模型或许比epoll 更高性能。当然,这只是根据网络IO 模型的原理作的一个假设,真正的应用还是需要实测了再说的。
1.Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache吧
2.ginx处理静态文件好,耗费内存少.但无疑apache仍然是目前的主流,有很多丰富的特性.所以还需要搭配着来.当然如果能确定nginx就适合需求,那么使用nginx会是更经济的方式.
3.nginx 适合做静态,简单,效率高,apache 适合做动态,稳定,功能强
4....


【关于Nginx/Apache + Tomcat架构方式,如何选择】
(1)Nginx:一款能承受高并发的HTTP服务器,异步的,多个连接(万级别)可以对应一个进程,进行响应。基于事件驱动模型。
Nginx优点:负载均衡、反向代理、处理静态文件优势。
(2)Apache:相对于Nginx来说,同步多进程模型,一个连接对一个进程方式处理请求。在速度上和消耗来说,Apache不能承受高并发,会导致宕机。
Apache优点:相对于Tomcat服务器来说处理静态文件是它的优势,速度快。Apache是静态解析,适合静态HTML、图片等。相对于Nginx来说,Nginx配置简洁,简单配置负载均衡,而Apache配置复杂。Nginx处理静态文件的性能也优于Apache,Apache提供的组件比Nginx多,
(3)Tomcat:动态解析容器,处理动态请求,是编译JSP\Servlet的容器。
Tomcat优势:处理动态请求,以线程的方式处理请求。

Nginx有动态分离机制,静态请求直接就可以通过Nginx处理,动态请求才转发请求到后台交由Tomcat进行处理。

动静分离普遍采用的架构组合有:
(1)比较早使用的,apache+tomcat
(2)nginx+tomcat
(3)nginx+apache+tomcat
很明显方案1比较老,但由于历史原因有部分系统在使用;方案3,很多人用pache来做一个中间层,用来检测请求,并做一些校验,和攻击防护,比加CSRF校验,防slow HTTP denial.这些只需要在apache加一个module即可,而真正的后台Tomcat只需要关注逻辑处理即可,更多是因为更熟悉apache或是更注重apache的稳定性,虽然nginx也可以实现相同功能

 

Nginx+tomcat是目前主流的Java web架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢!!!

Tomcat集群规划

192.168.1.111:8080
192.168.1.112:8080


安装步骤

 

Java JDK安装:参照 jdk安装实践

Nginx安装:参照ngixn.txt

Tomcat安装:参照tomcat安装
#官方网站下载tomcat 6.0.30或者其他版本:  

注:如下举措在一台上部署多台Tomcat时使用

 

#直接解压就可以使用,解压完成执行,同时拷贝两个tomcat,命名为tomcat1 tomcat2   
mv apache-tomcat-6.0.30  /usr/local/tomcat1  
cp /usr/local/tomcat1  /usr/local/tomcat2 -r  
#分别修改tomcat1和tomcat2 端口,这里有三个端口需要修改,分别如下:  
shutdown 端口:8005  主要负责启动关闭.  
ajp端口:8009 主要负责通过ajp均衡(常用于apache和tomcat整合)  
http端口:8080 可以通过web页面直接访问(nginx+tomcata整合)  
#注* 如果tomcat1三个端口分别为:8005 8009 8080 ,那么tomcat2端口在此基础上都+1,即为:8006 8010 8081  

#一台服务器上,端口不能重复,否则会报错。   
#修改完端口后,然后启动两个tomcat,启动命令为:  
#如何提示没有这个文件或者权限不足,需要tomcat 的bin目录对sh文件赋予执行权限:chmod o+x   *.sh  
/usr/local/tomcat1/bin/startup.sh  
/usr/local/tomcat2/bin/startup.sh  
#启动后,使用netstat -tnl 可以看到6个端口,即代表tomcat1 tomcat2成功启动。你可以使用http://ip:8080  http://ip:8081访问tomcat默认页面。
 

 

无论单台还是多台,如果需要修改tomcat发布目录为自己制定的目录,需要做如下调整,创建两个发布目录:
(1) mkdir -p /usr/webapps/{www1,www2} 
(2) 编辑vi /usr/local/tomcat1/conf/server.xml 在最后</Host>前一行加下内容:<Context  path="" docBase="/usr/webapps/www1" reloadable="false"/>
(3) 编辑vi /usr/local/tomcat2/conf/server.xml 在最后</Host>前一行加下内容:<Context  path="" docBase="/usr/webapps/www2" reloadable="false"/>
(4)  tomcat1发布目录内容:

    <html>  
    <body>  
    <h1>TOMCAT_1 JSP Test Page</h1>  
    <%=new java.util.Date()%>  
    </body>  
    </html>
(5) tomcat2发布目录内容:

    <html>  
    <body>  
    <h1>TOMCAT_2 JSP Test Page</h1>  
    <%=new java.util.Date()%>  
    </body>  
    </html>

然后访问http://ip:8080、8081查看测试内容。

注:由于我用的2台机器所以在2台的webapp内设置内容

(1) mkdir -p /usr/webapps/www

(2) 编辑vi /usr/local/src/tomcat7/conf/server.xml 在最后</Host>前一行加下内容:<Context  path="" docBase="/usr/webapps/www" reloadable="false"/>

(3)  tomcat1发布目录内容:test.jsp
    <html>  
    <body>  
    <h1>TOMCAT_1 JSP Test Page</h1>  
    <%=new java.util.Date()%>  
    </body>  
    </html>
(4) tomcat2发布目录内容:test.jsp

    <html>  
    <body>  
    <h1>TOMCAT_2 JSP Test Page</h1>  
    <%=new java.util.Date()%>  
    </body>  
    </html>

 

启动命令:

 /usr/local/src/tomcat7/bin/startup.sh & tail -f /usr/local/src/tomcat7/logs/catalina.out

 

测试:

http://192.168.1.111:8081/test.jsp

http://192.168.1.112:8081/test.jsp

 


Nginx+tomcat整合:负载均衡和动静分离
整合主要是修改nginx.conf配置,给一个完整的nginx.conf线上配置,部分参数可以自己根据实际需求修改:

 # vi /usr/local/nginx/conf/nginx.conf

 

   user www www;  
    worker_processes 8;  
    pid /usr/local/nginx/nginx.pid;  
    worker_rlimit_nofile 102400;  
    events  
    {  
    use epoll;  
    worker_connections 102400;  
    }  
    http  
    {  
      include       mime.types;  
      default_type  application/octet-stream;  
      fastcgi_intercept_errors on;  
      charset  utf-8;  
      server_names_hash_bucket_size 128;  
      client_header_buffer_size 4k;  
      large_client_header_buffers 4 32k;  
      client_max_body_size 300m;  
      sendfile on;  
      tcp_nopush     on;  

      keepalive_timeout 60;  

      tcp_nodelay on;  
      client_body_buffer_size  512k;  

      proxy_connect_timeout    5;  
      proxy_read_timeout       60;  
      proxy_send_timeout       5;  
      proxy_buffer_size        16k;  
      proxy_buffers            4 64k;  
      proxy_busy_buffers_size 128k;  
      proxy_temp_file_write_size 128k;  

      gzip on;  
      gzip_min_length  1k;  
      gzip_buffers     4 16k;  
      gzip_http_version 1.1;  
      gzip_comp_level 2;  
      gzip_types       text/plain application/x-javascript text/css application/xml;  
      gzip_vary on;  

    ###2012-12-19 change nginx logs  
    log_format  main  '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' 
                  '$status $body_bytes_sent "$http_referer" ' 
                  '"$http_user_agent"  $request_time $remote_addr';  

    upstream web_app {  
     server 192.168.1.111:8081 weight=1 max_fails=2 fail_timeout=30s;  
     server 192.168.1.112:8081 weight=1 max_fails=2 fail_timeout=30s;  
    }  

    ####chinaapp.sinaapp.com  
    server {  
        listen 80;  
        server_name  chinaapp.sinaapp.com;  
        index index.jsp index.html index.htm;  
        #发布目录/data/www  
        root  /data/www;  

        location /  
        {  
        proxy_next_upstream http_502 http_504 error timeout invalid_header;  
        proxy_set_header Host  $host;  
        proxy_set_header X-Real-IP $remote_addr;  
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
        proxy_pass http://web_app;  
        expires      3d;  
        }  

      }  

    } 

 

测试: http://192.168.1.100:88/test.jsp


注* server段 proxy_pass定义的 web_app 需要跟 upstream  里面定义的web_app一致,否则server找不到均衡。
最佳实践:这里把apache地址换成TOMCAT地址就实现了,相关参数需要研究
#如上配置,nginx+tomcat反向代理负载均衡配置完毕,如果要做动静分离,只需要在nginx添加如下配置就OK了

配置Nginx动静分离 

# vi /usr/local/nginx/conf/nginx.conf

 

location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$  
{  
    root /data/www;  
    #expires定义用户浏览器缓存的时间为3天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力  
    expires      3d;  
} 

 


最佳实践:

(1)这个/data/www是在nginx文件下建的,不是tomcat下面
(2)需要在/data/www下面建立相同的应用文件夹,比如/data/www/edu-demo/..

mkdir -p /data/www/edu-demo

(3)动静分离时出现的异常: dwz Error loading XML document: dwz.frag.xml
剖析:dwz.frag.xml是一个核心文件,需要加载才可以正常使用
这个文件不能进行分离,可以单独列在容器下面

(4)大坑:http://192.168.1.100:88/edu-demo 不行,这里必须这样写http://192.168.1.100:88/edu-demo/index.jsp


在web.xml中加入
    <mime-mapping> 
      <extension>xml</extension> 
      <mime-type>text/xml</mime-type> 
    </mime-mapping>

分享到:
评论

相关推荐

    Nginx + Tomcat 负载均衡配置详解

    **Nginx + Tomcat 负载均衡配置详解** 在现代互联网应用中,服务器的高可用性和性能优化是至关重要的。Nginx 和 Tomcat 的组合常常被用来实现这样的目标,其中Nginx作为反向代理和负载均衡器,而Tomcat作为Java应用...

    Nginx+Tomcat负载均衡配置教程

    ### Nginx+Tomcat负载均衡配置教程 #### 一、Nginx 安装与配置 **1. 下载并安装Nginx** - **下载Nginx**:前往Nginx官方网站下载适合您操作系统的最新版本。推荐下载稳定版以确保运行稳定。 - **解压文件**:将...

    linux下的nginx+tomcat负载均衡简单原理

    "Linux 下的 Nginx+Tomcat 负载均衡简单原理" Linux 下的 Nginx+Tomcat 负载均衡简单原理是指通过 Nginx 服务器来实现 Tomcat 服务器集群的负载均衡,以提高网站的可用性和性能。本文将对 Linux 下的 Nginx+Tomcat ...

    Nginx++Keepalived+Tomcat负载均衡&动静分离

    Nginx++Keepalived+Tomcat负载均衡&动静分离配置 本文主要介绍了Nginx、Keepalived和Tomcat的负载均衡和动静分离配置,旨在帮助读者了解如何搭建高可用、高性能的Web应用系统。 一、环境准备 在开始配置之前,...

    Nginx+Tomcat负载均衡

    3、Nginx+Tomcat负载均衡配置 首先创建两个文件,这两个文件 我来提供,将这两个文件拷入Nginx的conf文件夹下 1.proxy.conf 文件内容 #负责代理转发 proxy_redirect off; proxy_set_header Host $host; proxy_set_...

    Nginx+tomcat配置集群负载均衡实例

    配置Nginx+Tomcat集群负载均衡的第一步是安装Nginx和多个Tomcat实例。在多台服务器上部署Tomcat,形成一个集群,确保服务的高可用性。每台服务器上的Tomcat实例都需要配置相同的应用,以处理相同类型的请求。 接...

    Nginx+Tomcat 负载均衡 3分钟搞定

    要实现负载均衡,需要在 Nginx 服务器上配置 upstream 模块,以便将请求分配到多台 Tomcat 服务器上。具体配置如下: 1. upstream netitcast.com { server 127.0.0.1:18080 weight=1; server 127.0.0.1:28080 ...

    linux下nginx+tomcat负载均衡配置

    ### Linux 下 Nginx + Tomcat 负载均衡配置详解 #### 一、Nginx 安装 Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强。在 Linux 系统上...

    Nginx+tomcat+redis

    - **负载均衡**:Nginx可以基于多种策略(如轮询、最少连接、IP哈希等)分配请求到不同的Tomcat实例,从而实现负载均衡,提高系统的可用性和响应速度。 - **静态资源处理**:Nginx对静态文件(如CSS、JavaScript、...

    Nginx+tomcat 实现负载均衡session共享demo

    `Nginx`作为一款高性能的反向代理服务器,常被用于负载均衡,而`Tomcat`则是一款广泛使用的Java应用服务器,尤其适合处理Servlet和JSP应用。本教程将详细讲解如何通过`Nginx`实现`Tomcat`集群的负载均衡,并实现`...

    nginx+tomcat 负载均衡简易配置与动静分离

    负载均衡配置在`upstream`块中完成。例如,`upstream backend`定义了一个名为`backend`的负载均衡组,包含两台运行Tomcat的服务器。Nginx会自动分发请求到这些服务器,提高服务的可用性和响应速度。 对于动静分离,...

    Nginx+keepalived+tomcat实现性负载均衡(包含需要的包)

    在Nginx配置文件中,你可以设置upstream模块来定义后端Tomcat服务器的列表和负载均衡策略。 2. 安装Tomcat:部署多个Tomcat实例,每个实例运行在不同的端口上,以处理来自Nginx的请求。 3. 安装keepalived:解压`...

    nginx+redis负载均衡、session共享

    在构建高性能、高可用的Web服务时,"nginx+redis负载均衡、session共享"是一个常见的解决方案。这个方案结合了Nginx的反向代理和负载均衡能力,以及Redis的内存数据存储和分布式特性,用于处理高并发场景下的HTTP...

    Nginx+Tomcat+Redis搭建均衡负载集群

    这个架构利用Nginx作为反向代理和负载均衡器,Tomcat作为Java应用服务器处理业务逻辑,而Redis则用作缓存系统以提升数据访问速度。下面我们将详细探讨这些组件的作用及其在集群环境中的配置与协同工作。 **Nginx** ...

    Windows+Nginx+Tomcat做负载均衡同时实现session共享Demo

    最后,这个Demo可能包含了qdksDemo这个项目的配置文件、源代码以及部署脚本,帮助我们理解如何在Windows环境中配置Nginx和Tomcat,以及如何实现负载均衡和session共享的详细步骤。用户可以通过解压qdksDemo文件,...

    Nginx+KeepAlived+Tomcat负载架构

    ### Nginx+KeepAlived+Tomcat负载架构详解 #### 一、概述 随着互联网应用的日益增多,单一服务器已经难以满足高并发、高可用性的需求。因此,越来越多的企业开始采用集群技术来提高系统的稳定性和扩展性。本文将...

    redis+tomcat+nginx负载均衡配置

    在构建高性能、高可用性的Web服务时,"redis+tomcat+nginx负载均衡配置"是一个常见且有效的架构模式。这个组合充分利用了各个组件的优势,确保系统稳定、响应快速,并能够处理大量的并发请求。以下是关于这个配置的...

    win7+nginx+tomcat均衡负载配置

    win7环境下nginx+tomcat均衡负载配置,减轻服务器的负担,提高服务器性能

Global site tag (gtag.js) - Google Analytics