ファイルを提供せずにNginx構成から200で返信する


122

この構成行でファイルを提供せずに200応答を返すようにApacheを構成しました

Redirect 200 /hello

Nginxでこれを行うことはできますか?ファイルを提供したくありません。サーバーに200で応答させたいだけです(要求をログに記録しているだけです)。

インデックスファイルを追加して同じことを実現できることは知っていますが、設定でそれを行うと、間違っている可能性が1つ少なくなります。

回答:


261

はい、できます

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;
}

1
応答に改行を追加するにはどうすればよいですか?gangnam\nstyle
tback

1
@tbackもちろん、そうです
-cadmi

4
古い 'Content-type'を置き換える代わりに別のヘッダーを追加するため、add_headerは機能しません。私の応答では、私は2 'コンテンツタイプのヘッダーがあります:$カール-vはlocalhost /ヘルス/ h1_pio> GET /ヘルス/ h1_pio HTTP / 1.1>のUser-Agent:/ 7.38.0カール>ホスト:ローカルホスト>受け入れ:/ > <HTTP / 1.1 200 OK <日付:2016年10月11日火曜日13:27:53 GMT <Content-Type:application / octet-stream <Content-Length:25 <Connection:keep-alive <Content-Type:application / json
jmcollin92

1
@ jmcollin92のコメントは、質問され、回答が与えられた質問とは関係ありません。なんらかのproxy_pass、fascgi_passなどが明らかにあるからです...しかし、私はまだlocation / healthcheck / h1_pio {#proxy_pass blablabla必要なものに答えます。proxy_hide_header Content-Type; add_header Content-Type application / json; }将来的には、正確かつ適切な場所にあなたの質問をする
cadmi

6
@ jmcollin92は、別の場所で宣言された既存のdefault_typeがある場合に発生する可能性があります。ディレクティブのdefault_type text/plain;代わりにロケーションブロックの内部を使用することでオーバーライドできますadd_header
tjb1982

20

Nginxは応答本文のない200を許可しないため、204を使用する必要があります。204を送信するには、適切な場所でreturnディレクティブを使用しreturn 204;ます。


ブラウザでこれを表示しようとすると、何もしなかったように見えます。それは意図的です。何も提供していません(204)、何も表示されません。204を務めたことを証明するには、を使用しますcurl
jnovack

4

ステータスコードの定義に従って、200ではなく204にする必要があると考えています。200は応答内のリソースを使用する必要があります。そうしないと、ほとんどの健全なブラウザが混乱するでしょう。使用できるもう1つは304で、キャッシュされたコンテンツ用です。

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


確かに、204にします。どうすればいいですか?私はブラウザが空のボディによって混乱することを非常に疑いますが。
テオ

1
空の本文は、空のindex.htmlなどのオブジェクトを含む応答のままです。あなたが尋ねたのは、リソースが添付されていない(ファイルが提供されていない)200応答を提供することです。nginxでそれを正確に行う方法については、自分で調べる必要がありますが、これはApacheで一度しか行ったことがなく、オフハンドで思い出すことはできません。
サンドロイド

304は、デバッグや一時的な戻り値など、間違った信号をすべて送信するようです。
クズカイ

2

@Martin Fjordvalの回答を完了するには、このような構成を使用してヘルスチェックを行う場合は注意してください。

一方で204HTTPコードがヘルス(コンテンツのない成功指示)のために、意味的に完全である、いくつかのサービスがないではない、それの成功を検討してください。

つまり、Google Cloud Load-balancersに問題がありました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.