Responder com 200 da configuração do Nginx sem exibir um arquivo

122

Eu configurei o Apache para enviar uma resposta 200 sem enviar nenhum arquivo com esta linha de configuração

Redirect 200 /hello

Posso fazer isso com o Nginx? Não quero servir um arquivo, só quero que o servidor responda com 200 (apenas registro a solicitação).

Sei que posso adicionar um arquivo de índice e conseguir a mesma coisa, mas fazê-lo na configuração significa que há menos uma coisa que pode dar errado.

Theo
fonte

Respostas:

261

Sim você pode

location / {
    return 200 'gangnam style!';
    # because default content-type is application/octet-stream,
    # browser will offer to "save the file"...
    # if you want to see reply in browser, uncomment next line 
    # add_header Content-Type text/plain;
}
cadmi
fonte
1
como adiciono uma nova linha à resposta? gangnam\nstyle?
Tb #
1
@tback é claro, você está certo
cadmi
4
add_header não funciona para mim, pois adiciona outro cabeçalho em vez de substituir o antigo 'tipo de conteúdo'. Na minha resposta, tenho 2 cabeçalhos 'tipo de conteúdo': $ curl -v localhost / healthcheck / h1_pio> GET / healthcheck / h1_pio HTTP / 1.1> User-Agent: curl / 7.38.0> Host: localhost> Accept: / > <HTTP / 1.1 200 OK <Data: Terça-feira, 11 de outubro de 2016 13:27:53 GMT <Tipo de conteúdo: application / octet-stream <Comprimento do conteúdo: 25 <Conexão: manter ativo <Tipo de conteúdo: application / json
Jmcollin92 11/11
1
@ jmcollin92 seu comentário não tem nada a ver com a pergunta que foi feita e à qual a resposta foi dada. porque você obviamente tem algum tipo de proxy_pass, fascgi_pass, tanto faz ... mas ainda respondo location / healthcheck / h1_pio {# proxy_pass blablabla o que você precisa; proxy_hide_header Tipo de conteúdo; add_header Tipo de conteúdo application / json; } no futuro, faça sua pergunta corretamente e no local apropriado #
cadmi
6
@ jmcollin92 que pode acontecer se você tiver um default_type existente declarado em outro lugar. Você pode substituí-lo usando default_type text/plain;dentro do bloco de localização no lugar da add_headerdiretiva.
tjb1982 23/05
20

Você precisa usar um 204, pois o Nginx não permitirá um 200 sem corpo de resposta. Para enviar uma 204 você simplesmente usar a diretiva de retorno para return 204;no local apropriado.

Martin Fjordvald
fonte
Se você tentar visualizar isso através de um navegador, parecerá que não fez nada. isso é intencional. Você não serviu nada (204), ele não exibe nada. Para provar que você serviu um 204, use curl.
jnovack 19/03
4

De acordo com as definições de código de status, acredito que você queira que sejam 204, e não 200. Os 200 precisam estar com um recurso na resposta, ou eu suspeitaria que a maioria dos navegadores sãos ficaria confusa com isso. O outro que você pode usar é o 304, que é para conteúdo em cache.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

sandroid
fonte
Claro, faça 204, como faço? Embora eu duvide muito que qualquer navegador fique confuso com um corpo vazio.
Theo
1
um corpo vazio ainda é uma resposta, com um objeto, como um index.html em branco. O que você pediu é fornecer uma resposta de 200 sem recurso anexado (nenhum arquivo exibido). Quanto a como exatamente fazê-lo no nginx, preciso procurar por mim mesmo, só fiz isso uma vez no apache e não consigo me lembrar de imediato.
Sandroid
304 parece enviar todos os sinais errados para coisas como depuração e retornos temporários.
Kzqai #
2

Para concluir a resposta de @Martin Fjordval, tenha cuidado se estiver usando essa configuração para fazer uma verificação de saúde.

Embora um 204código HTTP seja semanticamente perfeito para uma verificação de integridade (indicação de sucesso sem conteúdo), alguns serviços não o consideram um sucesso.

Ou seja, eu tive o problema com os balanceadores de carga do Google Cloud .

toadjaune
fonte