所以,我在Debian服务器上安装了apache 2.2.16(64位)。我已经配置了一个代理,用于映射到我的后端Tomcat 7服务器的特定URL。
除了多部分POST请求之外,所有GET / POST请求都能正常工作。 apache的错误日志显示以下行:
[error] [client CLIENT_IP] (20014)Internal error: proxy: error reading status line from remote server TOMCAT_IP:8081
[error] [client CLIENT_IP] proxy: Error reading from remote server returned by /svc/document
奇怪的是,如果我上传一个ZERO Kb文件,POST multipart工作正常,但是与其他文件失败(不超过几个字节)。包括上传在内的所有内容都适用于我的开发环境(XAMPP + mod_proxy + tomcat)
Tomcat 7连接器:
<Connector port="8081" protocol="HTTP/1.1" address="TOMCAT_IP" maxThreads="6000"
connectionTimeout="40000" URIEncoding="UTF-8" maxPostSize="8388608"
redirectPort="8443" />
代理配置如下:
<VirtualHost *:80>
DocumentRoot /var/www/frontend/
ServerName frontend.com
ProxyPass /svc/ http://[TOMCAT_IP]:8081/web/ connectiontimeout=40 timeout=60 Keepalive=On min=20 acquire=20 retry=1
</VirtualHost>
我甚至尝试了一些一个又一个的建议,就像在类似的问题上找到的那样,但没有运气:
<VirtualHost *:80>
DocumentRoot /var/www/frontend/
ServerName frontend.com
ProxyPass /svc/ http://[TOMCAT_IP]:8081/web/ connectiontimeout=40 timeout=60 Keepalive=On min=20 acquire=20 retry=1
ProxyBadHeader Ignore
ProxyRequests Off
LimitRequestBody 8388608
SetEnv proxy-sendchunked 1
</VirtualHost>
我尝试了ProxyPassReverse,提升超时,ProxyBadHeader忽略,setenv proxy-initial-not-pooled 1等似乎没什么用......有什么想法吗?
答案 0 :(得分:0)
我有一个类似的问题,错误不在“ Apache”中。
我认为第一步,您需要直接在tomcat网址中请求上传。
卷曲的样品:
curl -X POST \
http://[YOUR IP OR LOCALHOST]:8081/web \
-H 'Accept: application/json' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: multipart/mixed' \
-H 'Postman-Token: 406bfbe4-94d3-0c70-1b0f-0d1fdb2a6f5b' \
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-F 'uploadFile=@20180703_1409164.mp4'
通过直接将请求发送给tomcat,您将确保该错误不是来自httpd。
如果您收到格式错误的服务器响应,并且要忽略它,我们可以在我们的httpd.conf中设置此选项:
ProxyBadHeader Ignore
更改之后,它终于向您揭示了真正的问题。
通常,错误是由某些上传限制引起的。
您可以在server.xml中增加限制
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxSwallowSize = "-1"/>
或者如果您的问题是超时:
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
connectionUploadTimeout="36000000" disableUploadTimeout="false"
connectionTimeout="60000" redirectPort="8443" />
更多信息:
http://www.baeldung.com/spring-maxuploadsizeexceeded
http://somepixels.net/en/502-proxy-error-uploading-from-apache-mod_proxy-to-tomcat-7/
答案 1 :(得分:0)
我前一段时间找到了解决方案, 我将其发布以供将来参考。
问题既不是Tomcat,也不是Apache。 问题出在底层网络中。 ISP作为单独的链接提供的2个服务器之间的连接丢失/ MTU参数配置错误。这导致网络丢弃的帧大于一定数量的字节。 将MTU明确设置为1500后,问题就解决了。