当我发布特定的SVG字符串时,Apache + mod_wsgi中出现了一个奇怪的504错误。后端应用程序是Python Flask,但它似乎根本没有进入应用程序。
这是一个返回504错误的请求:
curl 'https://some.domain.com/api/export/png' --data 'svg=%22%3E%28style'
这是另一个以200返回的人:
curl 'https://some.domain.com/api/export/png' --data 'svg=%22%3E%28styl'
不同之处在于我只从POST数据中删除了一个字符
SVG数据被削减到可能产生错误的最小数据。原始的SVG字符串要大得多。
apache错误日志中出现的错误是:
[Tue Jun 09 14:27:26 2015] [error] [client X.X.X.X] (104)Connection reset by peer: mod_wsgi (pid=19254): Unable to get bucket brigade for request., referer: https://some.domain.com/
[Tue Jun 09 14:27:26 2015] [error] [client X.X.X.X] mod_wsgi (pid=19252): Exception occurred processing WSGI script '/var/www/ade/src/interface.wsgi'.
[Tue Jun 09 14:27:26 2015] [error] [client X.X.X.X] IOError: failed to write data
有意思的是,在我发出请求之后,在发布数据上传完成之前,错误会在错误日志中出现错误。
以下是我们的版本号:
Ubunut 12.04
Apache/2.2.22 (Ubuntu)
mod_ssl/2.2.22
OpenSSL/1.0.1
mod_wsgi/3.3
Python/2.7.3
可能导致此问题的任何线索?
更新:我们将mod_wsgi更新为4.4.12,并在error.log中更改了错误消息
[Wed Jun 10 05:48:35 2015] [error] [client X.X.X.X] mod_wsgi (pid=5019): Request data read error when proxying data to daemon process: Connection reset by peer., referer: http://devade.annalect.com/
这可能与Web服务器前面的AWS负载均衡器有关。将尝试就此进行调查。 http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-error-message.html#ts-elb-errorcodes-http504