Apache2反向代理似乎间歇性地冻结时,代理一个tomcat的Web应用程序。
问题是,每当我尝试login到代理的这个web应用程序时,每隔一段时间(通常在闲置之后一天或两天)就会冻结。 应用程序只是无限期地冻结,没有500响应代码…浏览器只是等待和等待。
如果我一直试图从我的浏览器提示url,它最终会再次开始工作。
我试图通过直接导航到Tomcat端口8080上的Web应用程序来重现此问题,但是我从来没有能够不经过反向代理重现此问题。
这是我的反向代理configuration…任何错误发现想法? 谢谢
在/ etc / apache2的/网站可用/默认
ProxyPass /manage/ http://localhost:8080/manage/ ProxyPassReverse /manage/ http://localhost:8080/manage/ ProxyPass /manage http://localhost:8080/manage ProxyPassReverse /manage http://localhost:8080/manage
/etc/apache2/mods-available/proxy.conf
<IfModule mod_proxy.c> #turning ProxyRequests on and allowing proxying from all may allow #spammers to use your proxy to send email. ProxyRequests Off <Proxy *> AddDefaultCharset off Order deny,allow Deny from all Allow from all </Proxy> # Enable/disable the handling of HTTP/1.1 "Via:" headers. # ("Full" adds the server version; "Block" removes all outgoing Via: headers) # Set to one of: Off | On | Full | Block ProxyVia On </IfModule>
更多信息:(不确定是否相关)
启用apache模块:
core_module(静态)log_config_module(静态)logio_module静态mpm_worker_module静态http_module静态so_module(静态)alias_module(共享)auth_basic_module(共享)authn_file_module(共享)authz_default_module(共享)authz_groupfile_module(共享)authz_host_module(共享)authz_user_module共享)proxy_module(共享)proxy_ajp_module(共享)proxy_connect_module(共享)proxy_http_module(共享)reqtimeout_module(共享)dq_module(共享) rewrite_module(共享)setenvif_module(共享)status_module(共享)
更新:我现在使用代理的ajp协议。 已经设置了一些额外的ProxyPassconfiguration,例如
ProxyPass /manage ajp://localhost:8009/manage max=20 ttl=120 acquire=10000 retry=0 ProxyPassReverse /manage ajp://localhost:8009/manage
我会尝试使用ajp从Apache连接到tomcat。
请使用mod_proxy_ajp和Tomcattestingconfiguration。
从日志来看,它看起来像tomcat没有响应Apache的请求。 它拒绝了连接。
如果stream量较高,请在应用程序日志中进行更深入的search。 这可能是一个僵局或maxthreads达成。
HTH
检查你的apache文件caching是否被禁用。
# LoadModule file_cache_module modules/mod_file_cache.so
如果这不能解决问题(不应该,这似乎不是caching问题)尝试使用mod_jk进行debugging。 为你的Apache下载适当的mod_jk版本,设置它并设置日志级别为DEBUG
# Set the jk log level [debug/error/info] JkLogLevel debug
另外,在你的Apache日志中包含大量的信息
LogFormat "%h %l %u %t \" %m \"%V\" \"%r \" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D CustomLogFormat . . . CustomLog "|C:/Apache2/bin/rotatelogs.exe C:/Apache2/logs/access_%Y%m%d.log 86400" CustomLogFormat
你现在应该有一个微博服务的Apache日志,以及一个到tomcat的AJP 1.3连接(使用mod_jk)的debugging级日志。
完成后,重新启动Apache并尝试强制冻结错误。 发生错误时,请检查时间,然后浏览日志以查看当时发生的事情,apache花费多less时间处理等等。
它不会解决任何问题,但最有可能会给你一些洞察发生的事情。
如果连接被拒绝,你可能会触及Tomcat的maxthread计数。 什么是maxclient设置为Apache? 什么是在Tomcat上设置的maxthread? 你想确保你的maxclient不超过maxthread。 如果不是,Apache将试图代理更多的连接比Tomcat可以服务和Tomcat将拒绝连接。
另外,如果您retry=0到您的ProxyPass语句的结尾Apache将不会禁用后端工作和遇到此问题时的恢复将更快。