2012-02-27 16 views
6

Uso nginx con varios backends fastcgi (php-cgi, mod-mono-fastcgi4). Ahora necesito enviar un encabezado http adicional al backend de fastcgi, básicamente lo mismo que proxy_set_header cuando use nginx como proxy inverso. Pero para mis conclusiones, no existe tal cosa como fastcgi_set_header en nginx.Enviar encabezado adicional a FastCGI back-end con nginx

Alguien tiene alguna idea de cómo hacerlo de todos modos? No quiero usar módulos nginx adicionales ya que la solución debe poder implementarse fácilmente en una amplia gama de sistemas de clientes.

Respuesta

7

me dio un rápido vistazo a la manual y creo que el más cercano se encuentra el paso de parámetros se fastcgi:

La solicitud cabeceras se transfieren al servidor FastCGI en forma de parámetros. En las aplicaciones y los scripts que se ejecutan desde FastCGI-server, estos parámetros generalmente son accesibles en forma de variables de entorno. Por ejemplo, el encabezado "User-agent" se transfiere como parámetro HTTP_USER_AGENT. Además de los encabezados de la solicitud HTTP, es posible transferir parámetros arbitrarios con la ayuda de la directiva fastcgi_param.

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

fastcgi_param

sintaxis: fastcgi_param valor del parámetro

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

+0

Lo he encontrado también.Sin embargo, fastcgi_param se usa para establecer las variables que se envían al servidor FastCGI, no a los encabezados HTTP. El problema es que no puede acceder a las variables fastcgi desde la aplicación (que es un script php o una aplicación web asp.net). – Dyna

+8

Lo tengo trabajando ahora usando 'fastcgi_param HTTP_X_MYVAR "myvalue";'. Si el nombre de la variable comienza con HTTP_, parece que se copia a los encabezados. Sin embargo, esto no está documentado y es específico de la implementación y podría cambiar con versiones futuras – Dyna

+0

Good find, Dyna. Tomaré nota de eso. – Kamu

0

Usted puede hacer esto con el tercer módulo del partido ngx_headers_more. Después de construir nginx con este módulo incluido, puede hacer lo siguiente en su configuración:

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

Nginx tiene ahora:

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

que se pueden utilizar en las reglas de localización si está añadiendo cabeceras, que aren Ya se ha especificado en su solicitud. Por defecto fastcgi usa:

fastcgi_pass_request_headers on; 

Que pasará todos los encabezados entrantes de la solicitud a fastcgi.

+2

@Dyna No, no debería. @Derek Dowling: su primera solución es incorrecta, 'fastcgi_pass_header' hace lo contrario de lo que explica: permite pasar encabezados desde la respuesta del servidor fastcgi al cliente, no desde la solicitud inicial al servidor fastcgi. La intención de esta directiva es mantener en la respuesta los encabezados especiales que pueden interpretarse mediante proxies inversos (como 'X-Accel-Buffering',' X-Accel-Limit-Rate', etc.) en algunos casos específicos. –

+0

No es corrent de acuerdo con el documento: Permite pasar campos de encabezado que de lo contrario están desactivados desde un servidor FastCGI a un cliente. –

0

Las URL de los artículos wiki de nginx anteriores están rotas.

nginx expone los valores de encabezado de la solicitud a través de variables con el prefijo $ HTTP_, por lo que un encabezado de la solicitud de HTTP_USER_AGENT está disponible a través de $ HTTP_USER_AGENT.

Del mismo modo un encabezado de solicitud llamado CHICKEN_SOUP estaría disponible a través de $ http_chicken_soup.

El siguiente ejemplo muestra cómo pasar el Autorización encabezado de solicitud HTTP a scripts PHP que se ejecutan bajo php-fpm (administrador de proceso PHP FastCGI).

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