Como verificar a existência de um cabeçalho de resposta nas regras do Nginx?

2

Configurar as regras de regravação para a solicitação provou ser bastante fácil no Nginx. Para a resposta , não muito (pelo menos, não para mim). Desejo remover o cabeçalho Content-Type da resposta se o cabeçalho Content-Length da resposta não estiver definido. Eu tenho o NginxHttpHeadersMoreModule instalado, de modo que deve permitir-me remover o cabeçalho, mas não consigo para encontrar uma maneira de verificar a existência do cabeçalho Content-Length da resposta usando uma regra na configuração do Nginx. Qualquer sugestão sobre como fazer isso seria muito apreciada!

    
por Victor Welling 30.07.2010 / 15:58

4 respostas

1

Parece que alguém perguntou isso no Stack Overflow e há uma variável para cada cabeçalho enviado chamado $ sent_http_my_custom_header.

Consulte link para detalhes.

Referência: link

[Nota pessoal: eu realmente não entendo porque SO, Server Fault, e todo o resto são fóruns separados agora, é bastante irritante.]

    
por 10.09.2013 / 13:19
1

Acho que você quer algo parecido com o seguinte em um bloco location :

if ($sent_http_content_length ~ '') {
    more_clear_headers Content-Type
    ...
}

Veja $ sent_http_name

(Disclaimer: Eu não tentei isso, eu só cavou os documentos porque eu achei a pergunta interessante. Isso pode ou não funcionar)

    
por 14.02.2012 / 23:03
0

Verificar bem a inexistência de algo é sempre um problema ... mas ....

Eu geralmente faço telnet para a porta que o nginx está ouvindo e faço uma http: //

telnet www.stackoverflow.com 80
Trying 69.59.196.211...
Connected to stackoverflow.com.
Escape character is '^]'.
GET /index.html HTTP/1.1
host: www.stackoverflow.com

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Fri, 30 Jul 2010 14:31:02 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Location: http://stackoverflow.com/index.html
Content-Length: 158

<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="http://stackoverflow.com/index.html">here</a></body>

Você também pode usar as opções de cabeçalho de dump para curl ou wget. Por exemplo, o wget suporta:

   -S
   --server-response
       Print the headers sent by HTTP servers and responses sent by FTP
       servers.

Por fim, registro em log personalizado pode permitir que você adicione cabeçalhos de resposta específicos, por exemplo:

log_format up_head '$remote_addr - $remote_user [$time_local]  $request '
  'upstream_http_content_type $upstream_http_content_type';
    
por 30.07.2010 / 16:42
0

Existe uma variável $content_length que, de acordo com o documentação é igual à linha Cabeçalho do conteúdo do pedido . Você provavelmente pode fazer

if ($content_length = 0) {
    do stuff with header
}

Não tenho certeza de qual será o valor $ content_length, ou mesmo se ele existirá se o cabeçalho estiver ausente, mas você pode usá-lo como ponto de partida para a solução.

    
por 30.07.2010 / 16:34