Como “ouvir” nginx grava em um soquete de arquivo

1

Estou tentando fazer com que o uwsgi e o nginx sejam bons. Depois de mudar para "sockets de arquivo" (espero que eu esteja usando a terminologia correta aqui) a partir de sockets TCP, a única coisa que obtenho do uwsgi é um 400 sem informações de log úteis. Eu gostaria de inspecionar o que exatamente o nginx está enviando para o uwsgi. Como faço isso? Tudo o que li até agora sobre o bash e sockets está relacionado a conexões TCP ou UDP.

Minha suposição é que o nginx é incapaz de gravar no soquete do arquivo, ou pelo menos propriamente, então eu gostaria de "inspecionar" o soquete do arquivo para ver o que, se alguma coisa, está sendo escrita lá.

Idealmente, gostaria que um tail -f equivalente apontasse para o arquivo de soquete.

Se essa suposição não estava correta, isso significaria que meu navegador está enviando uma solicitação malformada (IMO ALTAMENTE improvável, usando o Chrome) OU o uwsgi está reportando incorretamente a natureza do erro OU estou interpretando mal o significado de um HTTP 400 erro. Alguma dessas é uma possível causa do problema?

    
por Trindaz 27.12.2013 / 16:51

2 respostas

2

moving to "file sockets" (hopefully I'm using the right terminology here)

Às vezes, os soquetes unix são referidos desta forma, mas é um pouco impróprio e talvez o tenha levado a um equívoco aqui. Soquetes Unix são endereçados usando o sistema de arquivos, mas eles não são arquivos reais , significando:

I'd like to "inspect" the file socket to see what, if anything, is being written there. Ideally I'd like a tail -f equivalent to point at the socket file.

Não há nada escrito, se por "lá" queremos dizer armazenamento em disco. É uma tomada normal no sentido de que o que é gravado ali é mantido na memória pelo sistema operacional até ser lido.

Infelizmente, não é um soquete normal, pois não usa uma interface de rede (é por isso que o "endereço" é um caminho de arquivo), portanto você não pode assistir ao que está acontecendo escutando em qualquer interface específica loopback local), por exemplo, wireshark ou tcpdump .

Portanto, não tenho uma solução completa para o seu problema, mas espero que isso ajude você a seguir na direção certa. Eu fiz um pouco de pesquisa e transformou este S.U. Q & A , o que implica que você pode realizar um efeito de "eavedropping" usando dois soquetes com um relé no meio.

    
por 27.12.2013 / 18:28
1

O arquivo de soquete é um ponto de encontro, não uma área de armazenamento. Você não pode fazer algo como tail -f , porque tail -f lê dados como estão sendo armazenados e nada está sendo armazenado.

Se você quiser saber quais dados estão transitando pelo soquete, rastreie o que um dos processos está fazendo. Use strace e rastreie pelo menos as chamadas do sistema sendmsg e recvmsg .

Antes de fazer isso, no entanto, veja se você pode dizer o que está acontecendo nos logs de cada servidor. Configure nginx para depuração para obter logs mais detalhados. Verifique a configuração do seu servidor para ver onde os arquivos de log estão localizados e aumente o nível de registro, se desejar. Verifique onde os registros do uwsgi também o são.

    
por 28.12.2013 / 02:37