我们最近安装了一个IIS的Apache反向代理服务器。 除了一个之外,我们所有的应用都能正常工作
在一个应用程序中,我们将使用以下示例代码准备和传输PDF文件给用户:
Response.Clear(); Response.ContentType = "binary/octet-stream"; Response.AddHeader("Content-Disposition", "attachment; filename=" + downloadName + "; size=" + downloadBytes.Length); Response.OutputStream.Write(downloadBytes, 0, downloadBytes.Length); Response.End();
该应用程序似乎挂起,从不stream传PDF。 该应用程序工作正常,没有代理。 而且,如果我使用相同大小的PDF并将其存储在服务器的文件系统上,然后从该目录下载,则工作正常。 当我们尝试使用响应stream时,似乎只有一个问题。
我怀疑这个连接在生成PDF的时候没有保持活跃(大约需要5到7秒),但是我已经调整了超时时间,没有运气。
这是我的Apache代理configuration。
<VirtualHost *:443> <Proxy *>
顺序拒绝,允许全部允许
SSLEngine on SSLCertificateFile C:/certs/example.crt SSLCertificateKeyFile c:/certs/example.key ServerName www.example.com ProxyVia On ProxyPass / http://127.0.0.1:5000/ timeout=360 ProxyPassReverse / http://127.0.0.1:5000/ ProxyPreserveHost On LogLevel debug
所以我解决了我的问题。
应用程序中有一个内部进程,它将使用自引用URL来生成PDF。
我有proxypreservehost上导致PDF进程超时,因为它产生了一些错误的url。
我禁用proxypreservehost,它的作用就像一个魅力!
那么使用下面的“!”来排除PDF文件呢? 指令从mod_proxy手册 ?
那! 指令在你不想反向代理一个子目录的情况下很有用,例如
ProxyPass / mirror / foo / i! ProxyPass / mirror / foo http://backend.example.com
将所有的请求代理到/ mirror / foo到backend.example.com,除了对/ mirror / foo / i的请求。