Apache 反向代理 IIS 流文件

Apache 反向代理 IIS 流文件

我们最近设置了一个 Apache 反向代理,其背后有 IIS。除了一个应用程序外,其他所有应用程序都运行正常。

在一个应用程序中,我们将使用以下示例代码准备并将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();

应用程序似乎会挂起,并且永远不会流式传输 PDF。应用程序在没有代理的情况下可以正常工作。此外,如果我获取相同大小的 PDF 并将其存储在服务器的文件系统上,然后从该目录下载,它就可以正常工作。似乎只有在我们尝试使用 Response 进行流式传输时才会出现问题。

我怀疑在生成 PDF 时连接没有保持活动(大约需要 5 到 7 秒)但我已经调整了超时时间,但没有成功。

这是我的 apache 代理配置。

<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

答案1

所以我解决了我的问题。

应用程序中有一个内部过程,它将使用自引用 URL 来生成 PDF。

我使用了 proxypreservehost,由于它生成的一些错误的 URL,导致 PDF 进程超时。

我禁用了 proxypreservehost 但一切仍然运行良好!

答案2

如何使用以下 '!' 指令排除 pdf 文件mod_proxy 手册

! 指令在你不想反向代理子目录的情况下很有用,例如

代理密码 /mirror/foo/i !代理密码 /mirror/foohttp://backend.example.com

将把对 /mirr/foo 的所有请求代理到 backend.example.com,除了对 /mirr/foo/i 的请求。

相关内容