3

Play Framework を使用して Web API を開発しています。リバース プロキシとして nginx を使用します。API は組み込みシステムで使用されるため、返される情報はできるだけ軽くする必要があります。

本番モードの Play フレームワークは、正確にこれを返します: (RAW HTTP は Fiddler から取得されます)

HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Cache-Control: no-cache
Content-Length: 14

aTqYu1mxQPy|10

しかし、ユーザーと api の間に nginx を配置すると、応答は次のようになります。

HTTP/1.1 200 OK
Server: nginx/1.2.0
Date: Sun, 05 Aug 2012 15:08:31 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 14
Connection: close
Cache-Control: no-cache

aTqYu1mxQPy|10

ServerDateConnectionヘッダーはまったく必要ありません。これらは nginx によって自動的に追加されます。(または、以前の実験で私のnginx構成を台無しにしたためです)

ngnixにヘッダーを伝えずにそのまま渡すように指示する方法はありますか?

4

2 に答える 2

3

nginx のサードパーティ モジュールhttps://github.com/agentzh/headers-more-nginx-module を使用して、任意のヘッダーを変更 (および削除)
できます .
Connection: close - 永続的な (HTTP/1.1) 接続を閉じるために使用されます。
次の場合を除き、すべてのリクエストで、日付ヘッダーを HTTP/1.1 で提示する必要があります。

  1. If the response status code is 100 (Continue) or 101 (Switching
     Protocols), the response MAY include a Date header field, at
     the server's option.

  2. If the response status code conveys a server error, e.g. 500
     (Internal Server Error) or 503 (Service Unavailable), and it is
     inconvenient or impossible to generate a valid Date.

  3. If the server does not have a clock that can provide a
     reasonable approximation of the current time, its responses
     MUST NOT include a Date header field

私の知る限り、nginx は RFC に厳密に従っています。

于 2012-08-06T03:45:02.493 に答える
0

「接続」ヘッダーを削除する nginx ソースのパッチは次のとおりです: http://mailman.nginx.org/pipermail/nginx-devel/2017-February/009440.html

diff -r d2b2ff157da5 -r 25129d5509b8 src/http/ngx_http_header_filter_module.c
--- a/src/http/ngx_http_header_filter_module.c  Tue Jan 31 21:19:58 2017 +0300
+++ b/src/http/ngx_http_header_filter_module.c  Thu Feb 02 02:14:06 2017 +0800
@@ -389,7 +389,9 @@
         }

     } else {
-        len += sizeof("Connection: close" CRLF) - 1;
+        if (clcf->keepalive_header != 0) {
+            len += sizeof("Connection: close" CRLF) - 1;
+        }
     }

 #if (NGX_HTTP_GZIP)
@@ -560,8 +562,10 @@
         }

     } else {
-        b->last = ngx_cpymem(b->last, "Connection: close" CRLF,
-                             sizeof("Connection: close" CRLF) - 1);
+        if (clcf->keepalive_header != 0){
+             b->last = ngx_cpymem(b->last, "Connection: close" CRLF,
+                                  sizeof("Connection: close" CRLF) - 1);
+        }
     }

 #if (NGX_HTTP_GZIP)

nginx が他のヘッダーを削除するためのモジュールは次のとおりです: https://github.com/openresty/headers-more-nginx-module

keepalive_timeout 0;
keepalive_requests 0;

chunked_transfer_encoding off;

more_clear_headers 'Cache-Control';
more_clear_headers 'Content-Type';
more_clear_headers 'Date';
more_clear_headers 'Expires';
more_clear_headers 'Server';
more_clear_headers 'X-Debug-Token';
more_clear_headers 'X-Debug-Token-Link';
more_clear_headers 'X-Powered-By';
more_clear_headers 'X-Robots-Tag';
于 2020-06-08T02:21:23.757 に答える