`
benni82
  • 浏览: 123316 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

httpd2.2+mod_proxy+jetty7.2.0配置

阅读更多

httpd2.2+mod_proxy+jetty7.2.0

mod_proxy配置相关

===================================================

httpd通过自带的mod_proxy模块连接后端服务器(jetty7.2.0)。

<IfModule mod_proxy.c>
   ProxyRequests Off
   ProxyPreserveHost On
   ProxyPassMatch ^/(blog|user|mo)/(.*)$ http://localhost:8080 min=5 smax=16 max=64 ttl=300 timeout=20
</IfModule>

 


ProxyPassMatch ^/(blog|user|mo)/(.*)$ http://localhost:8080
与另外两种配置比较
1. 所有的apache请求都代理给后端服务器
ProxyPass /   http://localhost:8080/
缺点:后端服务器接受太多非法url,比如用户访问/admin/index.htm,apache也会乖乖的把请求代理给后端 ,后端服务器消耗一些cpu计算能力后,返回404。另外也不安全,此类探测性的请求在生产环境还是挺多的,这些请求在apache端就应该过滤掉。

2. 和mod_jk的jmount配置类似,每个模块需要一行
ProxyPass /blog http://localhost:8080/blog   min=5 smax=16 max=64 ttl=300 timeout=20
ProxyPass /user http://localhost:8080/user   min=5 smax=16 max=64 ttl=300 timeout=20

ProxyPass /mo http://localhost:8080/mo   min=5 smax=16 max=64 ttl=300 timeout=20

缺点:连接池没有共用,如上面的配置每行都会创建自己的连接池。可以把apache日志调到debug来查看。

由于我们使用Worker MPM,每个workor都有自己的连接池,连接池最大值同ThreadsPerChild,如配置

<IfModule worker.c>
    ServerLimit      16
    StartServers     5
    MaxClients       1024
    MinSpareThreads  25
    MaxSpareThreads  75
    ThreadsPerChild  64
</IfModule>

 

理论上最多有16个连接池,如果用第2种配置方式,连接池数就是16*3=48, 每个池最大64,就是最多有48*64=4096个连接到后端服务器。
而采用ProxyPassMatch,不会出现同一个workor创建多个连接池的问题,最多有16*64=1024 连接到后端服务器。

timeout=20: 连接超时时间,apache等待backend server接收/发送数据时间,默认和ProxyTimeout设置的时间相同。 该参数和mod_jk的 worker.localnode.socket_timeout 含义一致 指一个请求转发给backend server后,最长等待的时间(以秒为单位), 如果backend server对这个请求的响应时间超过了{timeout}秒,则apache返回502给用户,并且关闭和backend server的连接,所以timeout不能设置的过小,否则用户会看到502错误。

 

min=5 smax=16 max=64 ttl=300 : 连接池范围[min-max],超过16(smax)后按需创建连接。当连接数超过16(smax),非活动连接且空闲时间超过300(ttl)秒的会被apache关闭。如果是worker模式,max的默认值和ThreadsPerChild一致。

 

注意ttl和timeout区别

 

jetty配置相关

====================================================

 <Set name="ThreadPool">
        <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
<Set name="minThreads">10</Set>
<Set name="maxThreads">200</Set>
        </New>
</Set>

<Call name="addConnector">
       <Arg>
           <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<Set name="host"><Property name="jetty.host" /></Set>
<Set name="port"><Property name="jetty.port" default="8080"/></Set>
<Set name="maxIdleTime">300000</Set>
<Set name="Acceptors">2</Set>
<Set name="acceptQueueSize">256</Set>
<Set name="statsOn">false</Set>
<Set name="confidentialPort">8443</Set>
<Set name="lowResourcesConnections">20000</Set>
<Set name="lowResourcesMaxIdleTime">5000</Set>
          </New>
      </Arg>
</Call>

 

线程池:

线程池初始大小minThreads为10,最大maxThreads为200,

而任务队列初始大小为10, 如果任务队列大小不够,每次增加10(同minThreads)

 

maxIdleTime=300000: 单位毫秒,maxIdleTime值要和ttl的值一致,否则连接的关闭时间以min(maxIdleTime,ttl)为准

 

Accpetors=2: 从线程池划分2个线程用于监听连接端口

 

lowResourcesConnections=20000 lowResourcesMaxIdleTime=5000: 当连接数大于20000,表示jetty运行在低资源状态,此时的lowResourcesMaxIdleTime作为连接最长的空闲时间,目的在加快连接的回收。20000非精确值,jetty拿“selector.keys.size()“,既当selector的keys大小超过20000时,用lowResourcesMaxIdleTime的值作为maxIdleTime。

 

 

apache worker配置

===========================================================

# 服务器在断定请求失败前等待的秒数

# TimeOut指令用于设置Apache等待以下三种事件的时间长度:

#   1. 接受一个GET请求耗费的总时间。

#   2. POST或PUT请求时,接受两个TCP包之间的时间。

#   3. 应答时TCP包传输中两个ACK包之间的时间。

#   default 300

Timeout 15

KeepAlive On

# 一个持久链接中允许的最大请求数量

# default 100

MaxKeepAliveRequests 200 

# 持久链接中服务器在两次请求之间等待的秒数

# Apache在关闭持久连接前等待下一个请求的秒数。一旦收到一个请求,超时值将会被设置为Timeout指令指定的秒数。

# default 5

KeepAliveTimeout 10

 

# 每个子进程在其生存期内允许伺服的最大请求数量,到达MaxRequestsPerChild的限制后,子进程将会结束

# 对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。

MaxRequestsPerChild 20000

 

<IfModule worker.c>

# ServerLimit & ThreadLimit 需要配置其它worker指令前面

# default 16

    ServerLimit      16   

# 每个子进程可配置的线程数上限, ThreadsPerChild的配值不能超过ThreadLimit,否则启动报警告并自动调整ThreadPerChild

# default 64

    ThreadLimit      64   

# 服务器启动时建立的子进程数, 子进程在启动时建立这些线程后就不再建立新的线程了

# default 3

    StartServers     5    

# MaxClients指令设置了允许同时伺服的最大接入请求数量

# 对于混合型的MPM默认值是16(ServerLimit)乘以64(ThreadsPerChild)的结果

    MaxClients       1024

# worker的默认值是"75"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。

# default 75

    MinSpareThreads  25   

# Apache将按照"其大于等于MinSpareThreads加上ThreadsPerChild的和"自动修正你设置的值

# 75<64+25,所以MaxSpareThreads被重新设置为64+25=89

# default 250

    MaxSpareThreads  75

# 每个子进程建立的线程数,要设在超过64,需求相应配置ThreadLimit

# default 25

    ThreadsPerChild  64  

</IfModule>

    ThreadLimit实际是用来限制 ThreadsPerChild的取值,即 ThreadsPerChild必须不能大于 ThreadLimit。ThreadLimit的默认值是64,所以如果你的ThreadsPerChild=128,启动apache就给你一个“WARNING: ThreadsPerChild of 128 exceeds ThreadLimit value of 64 threads, lowering ThreadsPerChild to 64. To increase, please see the ThreadLimit directive.“ ,自动把 ThreadsPerChild降级为64。如果你非要 ThreadsPerChild=128,必须添加 ThreadLimit=N(N大于等于128),ThreadLimit还必须配在其他指令前面,否则无效。

    另外MaxClient的值必须<= ThreadsPerChild *ServerLimit,且能被 ThreadsPerChild 整除,默认值是 ThreadsPerChild *ServerLimit   ThreadsPerChild 表示实际使用值,可能被 lowering了

    MPM混合模式下,每个子进程根据实际ThreadsPerChild值一次性创建好所有线程,且在子进程活动期间不会再创建或销毁线程,线程要么工作要么空闲。
如果线程数不够,apache创建一个子进程批量增加可用线程。

 

     上面配置MaxSpareThreads=75是有问题的,因为MinSpareThreads=25, ThreadsPerChild=64,当一个进程下的 64线程中,有超过ThreadsPerChild-MinSpareThreads=64-25=39已经投入工作,此时空闲线程数小于 MinSpareThreads,是必要创建更多的空闲线程以保持空闲线程在[MinSpareThreads, MaxSpareThreads]范围内。新进程会创建ThreadsPerChild个线程 那么此时就有 MinSpareThreads+ThreadsPerChild = 25+64 = 89 个空闲线程,如果MaxSpareThreads < 89,就需要销毁空闲线程,刚创建又销毁显然是不合理的。   所以apache启动时会把MaxSpareThreads调整为>= MinSpareThreads+ThreadsPerChild的值

    另外StartServers被设置为5,启动初始创建6个进程,1个主进程(控制进程)和5个子进程,每个子进程初始化64个线程,5*64=320空闲线程,大于MaxSpareThreads(89),所以有4个子进程很快被杀掉,启动apache时可以用“ps -ux“观察到,

 

比较合理的worker配置

 

<IfModule worker.c>
# 配置都采用默认值,可以去掉
ServerLimit       16
ThreadLimit      64
StartServers     3
MinSpareThreads  25
MaxSpareThreads 250
# 应用特殊配置值
MaxClients       1024
ThreadsPerChild  64
</IfModule>
 


worker MPM:混合的多线程多进程
由于使用线程来处理请求,可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。

分享到:
评论

相关推荐

    apache2.2+mod_jk

    2. **配置Apache2.2**:安装完成后,打开Apache的配置文件`httpd.conf`,通常位于`conf`目录下。在此文件中,你需要添加`mod_jk`模块的加载指令,例如`LoadModule jk_module modules/mod_jk.so`。如果`mod_jk.so`不...

    apache2.2+mod_JK+Tomcat7+Terracotta3.7 集群(重要)

    这包括安装 mod_jk.so 模块,编辑 httpd.conf 文件添加 LoadModule 和 JkMount 指令,以及配置 worker.properties 文件来定义与 Tomcat 实例的连接。 2. 安装和配置 Tomcat 7:在每台服务器上安装 Tomcat,并在每个...

    Apache2.2+mod_ASPDOT

    2. **配置文件优化**:Apache2.2引入了更灵活的配置文件结构,使用VirtualHosts来管理多个网站,每个网站可以有自己的配置。这提高了管理大型多站点环境的效率。 3. **安全增强**:此版本包含对SSL/TLS的支持,通过...

    django+apache+mod_wsgi完美匹配包

    5. 使用mod_wsgi配置Apache,指定Django项目的`wsgi.py`文件作为入口点。 6. 重启Apache服务器,测试Django应用是否可以正常运行。 **优化与安全** 在部署生产环境时,需要考虑性能优化和安全性。例如,可以通过...

    Apache 2.2 + Tomcat 6.0 + MySQL 5.0 + mod_jk 整合

    - 配置Apache的httpd.conf文件中的mod_jk指令。 - 配置Tomcat的server.xml文件中的Connector元素。 #### 四、MySQL 5.0 的安装与配置 1. **安装MySQL 5.0**: - 下载MySQL 5.0.45的安装包。 - 安装并初始化...

    两台服务器上做Apache2.2+Tomcat6.0+mod_jk的负载均衡

    最后,更新Apache的httpd.conf文件,设置虚拟主机和mod_jk的负载均衡规则。 6. **监控与故障切换**:为了确保高可用性,需要监控服务器状态,并实现故障切换。如果一台服务器出现故障,mod_jk可以自动将请求重定向...

    apache代理mod_proxy、mod_proxy_http代理模块库包下载(32位windows\linux版本).txt

    该软件包是apache的httpd中mod_proxy.so、mod_proxy_http.so代理模块,分别对应包含linux、windows的版本。

    apahe_httpd2.2.25+mod_jk-1.2.31-httpd-2.2.3文件(32位)

    2. 将mod_jk.so(在Unix/Linux)或mod_jk.dll(在Windows)加载到Apache配置中。 3. 配置mod_jk的worker.properties文件,定义Tomcat实例(workers)及其连接参数。 4. 在Tomcat服务器上配置server.xml以识别mod_jk...

    Windows+Apache+mod_wsgi+virtualenv搭建django

    - 修改 Apache 的配置文件 httpd.conf,加载 mod_wsgi 模块,并指定包含自定义配置文件的路径。 6. **配置 Apache 和 Django:** - 创建 Apache 的自定义配置文件 `apache_django_wsgi.conf`,设置静态资源和 ...

    Windows下python flask+Apache+mod_wsgi+db2部署

    3. 配置 Apache 配置文件(httpd.conf) 4. 启动 Apache 服务 三、mod_wsgi 安装和配置 mod_wsgi 是一个 Apache 模块,用于将 Python 应用程序部署到 Apache 服务器上。为了安装和配置 mod_wsgi,需要遵循以下步骤...

    Apache+Tomcat+mod_jk+mod_ssl配置笔记

    在配置Apache与Tomcat的连接时,我们需要在httpd.conf中添加mod_jk的配置,例如启用mod_jk模块,设置worker定义(这将在workers.properties文件中详细描述)以及虚拟主机或路径的重定向规则。 接下来,workers....

    Jboss7 +apache 2.2.25+mod_jk 配置集群

    - 修改Apache的主配置文件`httpd.conf`,包含`mod_jk.conf`。 4. **配置Jboss**: - 在Jboss的`standalone.xml`配置文件中,添加AJP连接器,指定协议为AJP/1.3,scheme为http,socket-binding为ajp。 - 同时,在...

    Apache2.2 with mod_jk

    1. `httpd.conf`:Apache的主要配置文件,其中包含mod_jk的配置指令。 2. `workers.properties`:定义了Tomcat服务器实例(worker)的属性,如IP地址、端口、连接数限制等。 3. `uriworkermap.properties`:映射URL...

    apache + tomcat + mod_jk集群

    4. **配置mod_jk**:在Apache的配置文件httpd.conf中,添加mod_jk的LoadModule语句,然后创建一个名为workers.properties的文件,定义Tomcat集群的服务器实例。每个实例包括IP地址、端口、工作目录等信息。 5. **...

    apache2.4 +tomcat7+mod_jk.so 完美整合实例

    4. **配置 mod_jk**: 在 Apache 的配置文件(如 httpd.conf)中加载 mod_jk 模块,并设置 AJP 连接器的参数,如工作线程数、连接超时时间等。 5. **配置 worker.properties**: 创建 worker.properties 文件,定义 ...

    django+apache+mod_wsgi.rar

    4. **配置Apache**:在Apache的配置文件(如httpd.conf)中加载mod_wsgi模块,然后配置一个虚拟主机(VirtualHost),指定Django应用的位置。例如,添加以下内容: ``` LoadModule wsgi_module "path/to/mod_wsgi....

    windows_mod_wsgi_apache2.2-2.4_python2.6-3.4全版本都有

    在Apache的配置文件httpd.conf中添加mod_wsgi的配置指令,如LoadModule和WSGIScriptAlias,然后重启Apache服务器以使更改生效。 **总结** 这个压缩包对于需要在Windows环境下使用Apache和Python开发Web应用的用户...

    Apache2.2+Tomcat6 配置

    3. **配置Apache**:打开Apache的配置文件`httpd.conf`,添加以下内容来启用mod_proxy: ``` LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so ``` 4. **...

    Jboss6+mod_jk+apache2.2集群配置

    ### JBoss6 + mod_jk + Apache2.2 集群配置详解 #### 一、概述 在当今高并发、大数据的环境下,单一服务器往往难以满足业务需求,因此搭建服务器集群成为提升系统性能和可用性的有效手段之一。本文主要介绍如何...

Global site tag (gtag.js) - Google Analytics