requestの書き換えルールの設定は、Nginxでは非常に簡単であることが証明されました。 responseについては、それほど多くはありません(少なくとも、私にとってはそうではありません)。応答のContent-Lengthヘッダーが設定されていない場合、応答からContent-Typeヘッダーを削除したいのですが。 NginxHttpHeadersMoreModule がインストールされているので、ヘッダーを削除できますが、ルールを使用して応答のContent-Lengthヘッダーの存在を確認する方法が見つからないようです。 Nginxの構成で。これを行う方法についての提案は大歓迎です!
誰かがStackOverflowでこれを尋ねたようで、送信されたヘッダーごとに$ sent_http_my_custom_headerという変数があります。
詳細は https://web.archive.org/web/20140606142058/http://wiki.nginx.org/HttpCoreModule#.24sent_http_HEADER を参照してください。
参照: https://stackoverflow.com/questions/12431496/nginx-read-custom-header-from-upstream-server
location
ブロックに次のようなものが必要だと思います。
if ($sent_http_content_length ~ '') {
more_clear_headers Content-Type
...
}
$ sent_http_name を参照してください
(免責事項:私はこれを試したことがありません。質問が面白かったので、ドキュメントを調べました。これは機能する場合と機能しない場合があります)
変数があります$content_length
documentation によるとrequestの行Content-Lengthヘッダーに等しい。あなたはおそらくすることができます
if ($content_length = 0) {
do stuff with header
}
$ content_lengthがどのような値をとるか、またはヘッダーが存在しない場合にその値が存在するかどうかはわかりませんが、ソリューションの開始点として使用できます。
何かが存在しないことをよくチェックすることは常に問題です...しかし....
私は通常、nginxがリッスンしているポートにtelnetで接続し、手作りの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>
ダンプヘッダーオプションを使用して、curlまたはwgetを実行することもできます。たとえば、wgetは以下をサポートします。
-S
--server-response
Print the headers sent by HTTP servers and responses sent by FTP
servers.
最後に、 カスタムロギング を使用すると、特定の応答ヘッダーを追加できます。次に例を示します。
log_format up_head '$remote_addr - $remote_user [$time_local] $request '
'upstream_http_content_type $upstream_http_content_type';