(特别是 ASP.NET 回发——但即便如此,也只是其中的一部分)
我已将 nginx 配置为反向代理 ASP.NET 服务器。其中大部分工作得很好。所有 GET 请求都有效,大多数 POST 请求也有效。大多数 ASP.NET 回发都能正常工作。但是偶尔会出现回发,由于某种奇怪的原因,我还没有弄清楚,每次都无法收到回复(即保证会失败)。
这个特定的服务器被配置为可以通过指定端口号直接访问 ASP.NET 实例(绕过 nginx)。当绕过 nginx 时,一切正常,所有请求都会立即得到响应。
我能做些什么来进一步调试呢?我无法让 Nginx 记录诸如启动和结束上游请求/响应之类的事件,更不用说它们的整个主体了。Fiddler 无能为力,因为浏览器向 nginx 的请求没有任何问题;问题发生在 nginx 和 ASP.NET 之间。还有其他想法吗?
配置摘录: http: //pastebin.com/FyTtuUQZ
这可能与保活有关,因为回发最终会在大约 65 秒后超时 - 上述配置中指定的保活超时时间。但这可能是一个红鲱鱼。
PS 这是一个仅用于开发的服务器,反向代理的目的是为了让我们可以在这台机器上指向多个域,并且不兼容的服务器都看起来好像它们在端口 80 上。但是为了让我信任 nginx 反向-代理生产服务器,我需要了解这个问题以确保它不会影响生产。
问题:即使
Expect: 100-continue
请求中没有,ASP.NET 开发服务器也会发送 100 Continue 响应。Nginx 会发出一个没有 Expect 头的请求;ASP.NET 将响应一个,然后接收请求的其余部分,然后发送实际响应。然而,Nginx 只会转发 100 Continue 部分。它不会转发实际响应;至少在 nginx 1.4.2 上被吞下了。解决方案:使用 IIS,即使整个设置仅用于开发目的。