Назад | Перейти на главную страницу

Nginx как обратный прокси-сервер не отвечает на определенные запросы POST

(в частности, обратные передачи ASP.NET - но и то только некоторые из них)

У меня есть nginx, настроенный для обратного прокси-сервера ASP.NET. Большинство из них работает отлично. Все запросы GET работают, и большинство запросов POST тоже работают. Большинство обратных передач ASP.NET работают. Но есть случайная обратная передача, которая по какой-то странной причине, которую я не понял, не получает ответа каждый раз (то есть гарантированно не удастся).

Этот конкретный сервер настроен так, что можно получить доступ к экземпляру ASP.NET напрямую (в обход nginx), указав номер порта. Когда nginx обойден, все работает отлично, и на все запросы отвечают мгновенно.

Что я могу сделать для дальнейшей отладки? Мне не удалось заставить Nginx регистрировать такие события, как запуск и завершение восходящих запросов / ответов, не говоря уже об их телах. Fiddler не может помочь, потому что в запросе от браузера к nginx все в порядке; проблема возникает между nginx и ASP.NET. Есть другие идеи?

Отрывок из конфигурации: http://pastebin.com/FyTtuUQZ

Это может иметь какое-то отношение к сообщениям поддержки активности, потому что обратная передача в конечном итоге истекает примерно через 65 секунд - время, указанное в приведенной выше конфигурации как время ожидания проверки активности. Но это может быть отвлекающим маневром.

P.S. Это сервер только для разработки, и цель обратного проксирования состоит в том, чтобы мы могли указать несколько доменов на одной машине, и все несовместимые серверы выглядели так, как если бы они были на 80-м порту. Но для того, чтобы я мог доверять nginx reverse- проксируя производственные серверы, мне нужно понять эту проблему, чтобы убедиться, что она не повлияет на производство.

Эта проблема: Сервер разработки ASP.NET отправляет ответ 100 Continue, даже если не было Expect: 100-continue в запросе. Nginx выдаст запрос без заголовка Expect; ASP.NET ответит одним, затем получит остальную часть запроса, а затем отправит фактический ответ. Однако Nginx пересылает только часть 100 Continue. Он не пересылает фактический ответ; который проглатывается, по крайней мере, на nginx 1.4.2.

Решение: использовать IIS, даже если вся эта установка предназначена только для целей разработки.