1

nginx を使用して nodejs アプリをプロキシしています。私のアプリでは、常にヘッダーから「client_id」を要求しています。ローカルテストを行っているとき。すべてが正しく機能しています。しかし、Nginxでサーバーとプロキシにプッシュすると. その後、client_id が失われました。nginx がプロキシを実行すると、カスタム ヘッダー「client_id」が削除されることがわかります。

私が聞きたいのは:

  1. nginx が client_id を nodejs に渡すことができるようにする方法はありますか?
  2. カスタムヘッダーをnginxに渡す方法はありますか?
4

2 に答える 2

4

@Peter Lyonsに感謝します。理由がわかりました。はい、nginx はデフォルトですべてのヘッダーを宛先サーバーに渡します。ただし、例外は、デフォルトとして、名前にアンダースコア「_」が含まれるすべてのヘッダーをnginxがブロックすることです。

なぜnginxがこれを行うのかわかりません。しかし、この質問では、このアンダースコアがヘッダー「client_id」を取得できない理由です。

それを解決するには2つの方法があります:

1、アンダースコアを避けるためにヘッダー名を変更します。この質問では、「client_id」を「clientId」または「client-id」に変更します

2、nginx.conf の http 部分内で、underscores_in_headers on; を設定します。例:

http {
    ....

    underscores_in_headers on;

    ....
}
于 2013-08-13T05:01:26.293 に答える
0

デフォルトでは、nginx の HttpProxyModule はproxy_pass_request_headersが有効になっているため、クライアント要求ヘッダーを宛先サーバーに渡します。

私の最初の提案は、ヘッダーの名前を「X-Client-Id」に変更して、HTTP があなたのような非標準ヘッダー用に予約している拡張名前空間を利用し、nginx がそれを転送するかどうかを確認することです。そうでない場合は、proxy_set_headerディレクティブを見てください。

補足: カスタム ヘッダーを使用すること、特に「client_id」と呼ばれるものを使用することは、車輪の再発明を行っているか、Cookie とセッションを使用するための業界標準を理解していないことをほぼ確実に示しています。これが本当に必要であると確信していない限り、一歩下がって根本的な問題を再考することをお勧めします。

于 2013-08-12T02:36:21.657 に答える