2012-02-27 11 views
6

Io uso nginx con diversi fastcgi backend (php-cgi, mod-mono-fastcgi4). Ora ho bisogno di inviare un'ulteriore intestazione http al back-end fastcgi, sostanzialmente come fa proxy_set_header quando si usa nginx come proxy inverso. Ma ai miei risultati, non esiste una cosa come fastcgi_set_header in nginx.Invia un'intestazione aggiuntiva al backend FastCGI con nginx

Qualcuno ha qualche idea su come farlo comunque? Non voglio usare altri moduli nginx poiché la soluzione muste può essere facilmente implementabile su una vasta gamma di sistemi cliente.

risposta

7

ho preso una rapida occhiata al manuale e penso che il più vicino si può trovare è il passaggio di parametri FastCGI:

La richiesta intestazioni vengono trasferiti al FastCGI server sotto forma di parametri. Nelle applicazioni e gli script eseguiti dal server FastCGI, questi parametri sono generalmente accessibili sotto forma di variabili di ambiente. Ad esempio, l'intestazione "User-agent" viene trasferita come parametro HTTP_USER_AGENT. Oltre alle intestazioni della richiesta HTTP, è possibile trasferire parametri arbitrari con l'ausilio della direttiva fastcgi_param.

http://wiki.nginx.org/HttpFcgiModule#Parameters.2C_transferred_to_FastCGI-server.

fastcgi_param

sintassi: fastcgi_param valore del parametro

http://wiki.nginx.org/HttpFcgiModule#fastcgi_param

+0

L'ho trovato anch'io.Tuttavia, fastcgi_param viene utilizzato per impostare le variabili che vengono inviate al server FastCGI, non alle intestazioni HTTP. Il problema è che non è possibile accedere alle variabili fastcgi dall'interno dell'applicazione (che è uno script php o un'applicazione web asp.net). – Dyna

+8

Ora funziona ora usando 'fastcgi_param HTTP_X_MYVAR "myvalue";'. Se il nome della variabile inizia con HTTP_, sembra che venga copiato nelle intestazioni. Tuttavia, questo non è documentato e specifico per l'implementazione e potrebbe cambiare con le versioni future – Dyna

+0

Buona ricerca, Dyna. Ne prenderò nota. – Kamu

0

Si può fare questo con il terzo modulo partito ngx_headers_more. Dopo aver costruito nginx con questo modulo incluso, è possibile effettuare le seguenti operazioni nella configurazione:

location/{ 
    more_set_input_headers 'Foo: bar baz'; 
    ... 
} 
4

Nginx ha ora:

fastcgi_pass_header 'Cache-Control: no-cache, must-revalidate'; 

che può essere utilizzato nelle regole di localizzazione, se si sta aggiungendo le intestazioni che aren già specificato nella richiesta. Per impostazione predefinita fastcgi utilizza:

fastcgi_pass_request_headers on; 

Quale passerà tutte le intestazioni in entrata dalla richiesta a fastcgi.

+2

@Dyna No, non dovrebbe. @Derek Dowling: La prima soluzione è sbagliata, 'fastcgi_pass_header' fa l'opposto di ciò che spieghi: consente di passare intestazione (i) dal server fastcgi rispondere al client, non dalla richiesta iniziale al server fastcgi. L'intenzione di questa direttiva è di mantenere nella risposta intestazioni speciali che possono essere interpretate da proxy inversi (come 'X-Accel-Buffering',' X-Accel-Limit-Rate' ecc.) In alcuni casi specifici. –

+0

Non è corretto secondo il doc: Permette di passare i campi di intestazione altrimenti disabilitati da un server FastCGI a un client. –

0

Gli URL degli articoli wiki di nginx sopra sono infranti.

nginx espone valori di intestazione richiesta tramite variabili prefisso $ HTTP_, così un'intestazione di richiesta di HTTP_USER_AGENT è disponibile tramite $ HTTP_USER_AGENT.

Allo stesso modo un colpo di testa di richiesta di nome CHICKEN_SOUP sarebbe disponibile tramite $ http_chicken_soup.

L'esempio seguente mostra come passare l'autorizzazione Autorizzazione di richiesta HTTP agli script PHP in esecuzione in php-fpm (gestore di processi FastCGI di PHP).

location ~ \.php$ { 
    fastcgi_pass unix:/path/to/socket; 
    fastcgi_index index.php; 
    fastcgi_param HTTP_AUTHORIZATION $http_authorization; 
    ... other settings 
} 
Problemi correlati