Nginx como proxy reverso faz com que a falha responda a determinados pedidos POST

1

(especificamente, os postbacks do ASP.NET - mas mesmo assim apenas alguns deles)

Eu tenho o nginx configurado para inverter o proxy em um servidor ASP.NET. A maior parte funciona perfeitamente bem. Todas as solicitações GET funcionam e a maioria das solicitações POST também funciona. A maioria dos postbacks do ASP.NET funciona. Mas há o postback ocasional que, por algum motivo estranho que eu não tenha descoberto, falha em receber uma resposta, a cada momento (ou seja, é garantido que falhará).

Esse servidor específico é configurado para que seja possível acessar a instância do ASP.NET diretamente (ignorando o nginx), especificando um número de porta. Quando o nginx é ignorado, tudo funciona perfeitamente e todas as solicitações são respondidas instantaneamente.

O que posso fazer para depurar isso mais? Eu não consegui fazer com que o Nginx registrasse eventos como iniciar e finalizar os pedidos / respostas upstream, muito menos seus corpos inteiros. O violinista não pode ajudar porque não há nada de errado com o pedido do navegador para o nginx; o problema ocorre entre o nginx e o ASP.NET. Alguma outra ideia?

Trecho de configuração: link

Pode ter algo a ver com keepalives, porque o postback eventualmente expira após cerca de 65 segundos - o tempo especificado na configuração acima como o tempo limite de keepalive. Mas isso pode ser uma pista falsa.

P.S. É um servidor somente de desenvolvimento, e o propósito de fazer proxy reverso é para que possamos apontar vários domínios nesta máquina e ter servidores incompatíveis, todos como se estivessem na porta 80. Mas para eu confiar nginx reverse- servidores proxy de produção, preciso entender esse problema para garantir que ele não afetará a produção.

    
por RomanSt 20.07.2013 / 01:54

1 resposta

2

O problema: O servidor de desenvolvimento ASP.NET envia uma resposta 100 Continue mesmo quando não houve Expect: 100-continue na solicitação. O Nginx emitirá uma solicitação sem o cabeçalho Esperar; O ASP.NET responderá com um, receberá o restante da solicitação e enviará a resposta real. O Nginx, no entanto, só encaminhará a parte do 100 Continue. Não encaminhará a resposta real; que é engolido, pelo menos no nginx 1.4.2.

A solução: usa o IIS, mesmo que essa configuração seja apenas para fins de desenvolvimento.

    
por 23.07.2013 / 02:02

Tags