web-dev-qa-db-ja.com

Nginxがproxy_hide_headerおよびproxy_ignore_headerディレクティブを処理しない

Nginxにいくつかのヘッダーを無視させ、プロキシサーバーから隠そうとするのに苦労します。

Nginxに「Cache-Control」および「Server」ヘッダーを非表示にして無視させたいのですが、機能しませんでした。理由はわかりません。

私のconfは次のとおりです:

location / {
    proxy_pass http://111.131.50.42;
    proxy_hide_header Cache-Control;
    expires 60M;
    add_header Cache-Control "public";
    proxy_ignore_headers Cache-Control;
    proxy_hide_header Cache-Control;
    access_log off;
}

しかし、それでも、Originの「Cache-Control」ヘッダーと「Server」ヘッダーを受け取っています。

私が間違っていることを知っていますか?

追伸ngx_headers_moreモジュールを使用できません。このモジュールをNginxインストールに追加できません。

6
Dakser

ディレクティブproxy_ignore_headersは、特定の内部動作につながる特別なヘッダーの内容を無視するようnginxに指示します。

「X-Accel-Expires」、「Expires」、「Cache-Control」、「Set-Cookie」、および「Vary」は、応答キャッシュのパラメーターを設定します。

「X-Accel-Redirect」は、指定されたURIへの内部リダイレクトを実行します。

「X-Accel-Limit-Rate」は、クライアントへの応答の送信のレート制限を設定します。

「X-Accel-Buffering」は、応答のバッファリングを有効または無効にします。

「X-Accel-Charset」は、応答の目的の文字セットを設定します。

上流のサーバーからヘッダーを隠したい場合は、proxy_hide_headerを使用する必要があります。 Serverヘッダーは、DateX-PadX-Accel-...ヘッダーのように、デフォルトではクライアントに送信される応答に渡されません。

だから、これはうまくいくはずです:

location / {
    access_log off;
    add_header Cache-Control "public";
    proxy_pass http://111.131.50.42;
    proxy_hide_header Cache-Control;
    expires 60M;
}  

キャッシュされたデータを含むブラウザーからテストしていないことを確認します。curlを使用します。

10
Xavier Lucas