nginx restituisce intestazione personalizzata


13

Ho il seguente esempio

           location / {
                    proxy_read_timeout 2000;
                    proxy_next_upstream error;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header Host $http_host;
                    proxy_pass_header X_CUSTOM_HEADER;
                    proxy_redirect off;
                    proxy_max_temp_file_size 0;
                    proxy_pass https://prod;
                    break;
            }

Ora quando uso la seguente linea di arricciatura

curl --head -H "X_CUSTOM_HEADER: foo" http://domain.com/api/test

Ora che non funziona .. l'apache / php sul backend non vede l'intestazione. Se ignoro nginx funziona

curl --head -H "X_CUSTOM_HEADER: foo" http://web1.domain.com/api/test

Risposte:



2

È necessario utilizzare proxy_set_headerper tutte le intestazioni che si desidera inoltrare ai server back-end. Quindi invece della proxy_pass_header ...linea:

proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;

L'ho provato e non imposta correttamente l'intestazione, se sostituisco $ http_x_custom_header con "pippo" funziona
Mike

Non sono sicuro del motivo per cui non ha funzionato per @Mike ma ha funzionato per me. Sto usando X-Forwarded-Proto con $ http_x_forwarded_proto.
Tyler Collier,

2

Quanto sopra non ha funzionato neanche per me, quindi l'ho usato proxy_pass_header. Vedi il Wiki di Nginx su proxy_pass_header qui .

Se l'intestazione personalizzata viene device_idaggiunta proxy_pass_header device_id;al blocco proxy.

Se stai usando intestazioni personalizzate con un carattere di sottolineatura (come lo sono io) assicurati di averlo underscores_in_headers onnella tua configurazione Nginx.


Molte grazie ! Mi stavo togliendo i capelli .... Il tuo post mi ha sollevato ....
Fahad Ahammed,

1

Per impostazione predefinita, nginx inoltra tutte ( proxy_pass_request_headers su; ) l'intestazione al server back-end. Ma se l'intestazione della tua richiesta (può essere un'intestazione personalizzata) include il trattino basso (_) nel nome dell'intestazione, allora nginx blocca quelle intestazioni.

Ex: authenticate_type, cdn_enable.

Per consentire a Nginx di passare tutto o l'intestazione richiesta personalizzata al back-end, attiva l'opzione trattino basso.

underscores_in_headers on;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.