web-dev-qa-db-ja.com

NGINXは、proxy_passを使用するとヘッダー値を転送しません

次のセットアップを行い、すべての/ api要求を別のサーバーに送信するように構成しました。

location /api {
    proxy_pass              https://myapp.herokuapp.com;
    rewrite                 ^/api/(.*)              /$1     break;
}

私のアプリはヘッダー(USER_CUSTOMER)を送信します。機能するアプリからmyapp.herokuapp.comと直接通信するときに、プロキシサーバーを介してリクエストすると、APIサーバーで値がNULLと表示されます。

以下はNGINXで動作しますが、USER_CUSTOMERの値を設定できるようにするためにアプリが必要です。

location /api {
    proxy_pass              https://app.herokuapp.com;
    proxy_set_header        USER_CUSTOMER           ABC;
    rewrite                 ^/api/(.*)              /$1     break;
}

将来的に送信する追加のヘッダーがある可能性があるため、プロキシからAPIサーバーにすべてのヘッダーを渡すためのフラグがあることを期待しています。

Ubuntu
nginx/1.1.19
8
dallasclark

ヘッダー属性USER_CUSTOMERは無効な構文です。アンダースコアはヘッダー属性では無効です。

回避策はありますが、最善の解決策は、属性を有効な構文に書き換えることです。

回避策は、configでサーバー名を指定する場所を次のように設定することです。

underscores_in_headers on;
24
dallasclark

あなたが探していると思いますproxy_pass_request_headersオプション。オンに設定します。

location /api {
    proxy_pass_request_headers      on;
    proxy_pass                      https://app.herokuapp.com;
    proxy_set_header                USER_CUSTOMER              ABC;
    rewrite                         ^/api/(.*)                 /$1     break;
}
4
phoops