由于可怕的,可怕的错误,我们改变了将Apache连接到Tomcat的方式.我们用的是mod_jk:
JkMount /path ajp13
Run Code Online (Sandbox Code Playgroud)
现在我们正在使用mod_proxy_ajp:
ProxyPass /path ajp://localhost:8009/path
ProxyPassReverse /path ajp://localhost:8009/path
Run Code Online (Sandbox Code Playgroud)
但是,有一个功能JkMount提供但ProxyPass不提供:选择文件类型的能力.这使得代理html文件成为可能,但不能代理图像 - 换句话说,让好的快速Apache服务于静态的东西,并仅仅为动态的东西使用缓慢的Tomcat.
JkMount /*.html ajp13
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这一目标ProxyPass?可能使用周围的<Location>指令或类似的东西?
#question 根据tomcat的官方例子,我经常配置测试和启动。遇到一个奇怪的问题,发现8009启动有问题,端口和防火墙都正常,不知道怎么处理。
server.xml https://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html(配置示例)
# tomcat log
<code>
INFO: Server version name: Apache Tomcat/7.0.103
INFO: Server version number: 7.0.103.0
INFO: OS Name: Linux
INFO: CATALINA_HOME: /home/tomcat/apache-tomcat-7.0.103
INFO: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
INFO: Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
INFO: Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
INFO: Command line argument: -Dignore.endorsed.dirs=
INFO: Command line argument: -Dcatalina.base=/home/tomcat/apache-tomcat-7.0.103
INFO: Command line argument: -Dcatalina.home=/home/tomcat/apache-tomcat-7.0.103
INFO: Command line argument: -Djava.io.tmpdir=/home/tomcat/apache-tomcat-7.0.103/temp
Apr 13, 2020 5:47:16 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The APR based Apache Tomcat Native library which allows optimal …Run Code Online (Sandbox Code Playgroud) 我们需要在托管服务中托管java richfaces/hibernate应用程序.作为我们安全部门的要求,我们无法从该应用程序与内部数据库建立任何连接.一个建议的解决方案是创建内部Web服务,但更改所有数据库层很难.我想改用AJP.它足够安全吗?
[编辑]通过问这个我的意思是apache httpd将服务https并通过包装AJP进入我们的内部服务器可能会监控通道(明文)?我找不到协议本身的文档.
我按照这里的说明在AJP中设置maxPacketSize ...
它在文档中声明我需要"你还必须在Tomcat端更改AJP连接器的packetSize属性!属性packetSize仅在Tomcat 5.5.20+和6.0.2+中可用."
我不知道怎么改变它!
这个doc谈到在Tomcat中更改它,但是我无法找到实际需要更改它的位置(什么属性文件/配置文件等)
有人能给我一个线索吗?
谢谢!
我们有一个奇怪的,间歇性的错误,发生在mod_proxy_ajp,即使用apache作为tomcat服务器的前端.
错误
此错误间歇性地发生,但遗憾的是很少在我们的测试服务器上并且经常在生产中.
在firefox的LiveHttpHeaders中,我在上面的用例中看到以下内容:
我认为问题可能源于ProxyPassReverse(即混淆了是否使用http或ajp),但所有这些proxypassreverse设置都导致了同样的错误:
另外,我检查了apache错误日志(设置为debug),看不到警告或错误......
**但它适用于mod_proxy_http ??**
似乎切换到mod_proxy_http'解决了这个问题.有限的测试,我无法在测试环境中重现问题.
因为这个问题是间歇性的,所以我不能100%确定mod_proxy_http"解决"了这个问题
环境
另一个数据点
无论好坏,tomcat中的servlet过滤器会在将html发送到apache之前对其进行gzip压缩.(这意味着额外的工作,因为apache必须在执行ProxyPassReverse的"查找和替换"之前解压缩).我不知道"gzip"是否会混乱.
问题
谢谢
附录1:这是LiveHttpHeaders输出
浏览器错误地将html视为"text/plain"
http://forums.customer.com/pe/action/forums/displaythread?rootPostID=10842016&channelID=1&portalPageId=1002
GET http://forums.customer.com/pe/action/forums/displaythread?rootPostID=10842016&channelID=1&portalPageId=1002 HTTP/1.1
Host: forums.customer.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Proxy-Connection: keep-alive
Cookie: __utma=156962862.829309431.1260304144.1297956514.1297958674.234; __utmz=156962862.1296760237.232.50.utmcsr=forumstest.customer.com|utmccn=(referral)|utmcmd=referral|utmcct=/pe/action/forums/displaythread; s_vi=[CS]v1|258F5B88051D3FC3-40000105C056085F[CE]; inqVital=xd|0^sesMgr|{"sID":4,"lsts":1292598007}^incMgr|{"id":"755563420055418864","group":"CHAT","ltt":1292598006741,"sid":"755563549194447187","igds":"1290627502757","exempt":false}^inq|{"customerID":"755562378269271622"}^saleMgr|{"state":"UNSOLD","qDat":{},"sDat":{}}; inqState=sLnd|1^Lnd|{"c":4,"flt":1274728016,"lldt":17869990,"pgs":{"201198":{"c":1,"flt":1274728016,"lldt":0},"0":{"c":3,"flt":1274845009,"lldt":17752997}},"pq":["0","0","0","201198"],"fsld":1274728016697}; …Run Code Online (Sandbox Code Playgroud) 有没有人知道如果将协议设置为AjpNioProtocol,Tomcat版本7.0.27 AJP Connecter是否可以支持http升级(websockets). http://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html#Connector_Comparison
我正在使用大气,但即使有一个基本的套接字请求,客户端websocket也会关闭.Atmo错误:连接已关闭,未发送关闭帧.
我通常在 Tomcat 服务器中部署 Java Web 应用程序,并使用 proxy_ajp 通过 Apache 代理访问它们。问题是,在我的最新设置(基本相同)中,我发现我在所有请求中获得的状态代码都是重复的(即“状态代码:200 200”)。我在每个浏览器、Postman 以及我可能得到的任何状态代码中都得到了这个,一切似乎都工作正常,但我担心我的设置可能不是最佳的。
虽然我找不到解决方案,但我已将问题范围缩小到ajp_proxy,就好像我改变了一样
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
Run Code Online (Sandbox Code Playgroud)
和:
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,我的请求只得到一个状态代码。
我已经搜索过这个问题,但没有发现任何与之相关的内容,因此我们将非常感谢任何信息。
服务器信息:
提前致谢。
我有一个相当正常的设置,其中Apache代理通过AJP协议向在Tomcat内运行的servlet发出请求.
我们已经在Apache 2.0.46/Tomcat 5.0.28上运行此设置多年没有问题,但最近更新到Apache 2.2.3/Tomcat 5.5.
问题是我们已经注意到,间歇性地(可能是3次中的一次)Apache会以某种方式将servlet服务的页面的"Content-Type"HTTP头从"text/html"转换为"text/plain",导致浏览器显示HTML源而不是呈现它.
有没有人见过这种行为,知道可能是什么原因?我怀疑我们在servlet代码中做了一些不好的事情,旧版本的Tomcat/Apache更加宽容.
更新:我已经确认它是Apache更改标头.如果我直接浏览到Tomcat,则不会出现问题.
我的tomcat在8080上运行
apache在80上运行
我实现了
<Location />
ProxyPass ajp://localhost:8080/ retry=0 timeout=30
ProxyPassReverse ajp://localhost:8080/
</Location>
Run Code Online (Sandbox Code Playgroud)
我无法通过apache访问我的java应用程序,并且不断出错
[Thu May 23 15:47:33 2013] [error] (120006)APR does not understand this error code: proxy: read response failed from (null) (localhost)
[Thu May 23 15:48:15 2013] [error] (70014)End of file found: ajp_ilink_receive() can't receive header
[Thu May 23 15:48:15 2013] [error] ajp_read_header: ajp_ilink_receive failed
[Thu May 23 15:48:15 2013] [error] (120006)APR does not understand this error code: proxy: read response failed from (null) (localhost)
Run Code Online (Sandbox Code Playgroud)
任何建议解决ajp代理错误