El encabezado no configurado parece no funcionar con Apache 2.4.10 y php-fpm

El encabezado no configurado parece no funcionar con Apache 2.4.10 y php-fpm

Estoy intentando pasar encabezados del código php al registro de acceso de Apache usando encabezados HTTP, así:

Header note X-Userid userid
Header unset X-Userid

LogFormat "%h %l %{userid}n %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined_with_php_userid
CustomLog /var/log/apache2/access_log combined_with_php_userid

Con mod_php, el ID de usuario se inserta en el registro como se esperaba y el encabezado se desactiva antes de enviarlo al cliente.

Cuando se ejecuta a través de php-fpm, utilizando la siguiente línea, el ID de usuario no se inserta en el registro y no se desactiva en los encabezados HTTP del cliente.

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9001/var/html/$1

Originalmente estaba usando apache_notepero esto solo está disponible con mod_php. Encontré lo anterior como una solución para pasar datos de PHP a Apache/php-fpm o nginx, pero no parece funcionar con php-fpm.

¿Hay algo que deba habilitar o configurar para que Header unsetfuncione en php-fpm?

Configuración de host virtual:

<VirtualHost *:80>
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9001/web/ee2/sites/site.com/$1
    ServerAdmin [email protected]
    DocumentRoot /web/ee2/sites/site.com
    ServerName site.dev

    Header note X-Userid userid
    Header unset X-Userid

    ErrorLog  /var/log/apache2/site.dev-error_log
    LogFormat "%h %l %{userid}n %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined_with_php_userid
    # also tried: # LogFormat "%h %l %{X-Userid}i %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined_with_php_userid
    CustomLog /var/log/apache2/searchenginenews.com-access_log combined_with_php_userid

    <Directory /web/ee2/sites/site.com>
        AllowOverride All
        Require all granted
    </Directory>

</VirtualHost>

Respuesta1

mod_proxy_fcgi agrega encabezados de respuesta a r->err_headers_out lo que significa que debes usar al menos:

Header unset X-Userid always

Pero no hay razón para no utilizar ambos:

Header always unset X-Userid
Header unset X-Userid

Esta es una parte desafortunada de la API de Apache que se filtra en mod_headers: los encabezados pueden vivir en dos lugares dependiendo de si deben persistir para respuestas que no son exitosas.

Respuesta2

Según la solución de problemas en los comentarios, creo que esto es un error: los encabezados que regresan mod_proxy_fcgiparecen no estar disponibles mod_headersde ninguna manera y se combinan con los datos mod_headersdespués de que se procesan.

Por ahora, si necesita que este comportamiento funcione correctamente, tal vez mire nginx o lighttpd, o coloque una instancia de HAProxy o Varnish frente a Apache para realizar el registro y la manipulación del encabezado de la manera correcta.

Respuesta3

Esta pregunta es antigua, pero puede ayudar a alguien que busque la solución final:

Como señaló Covener, Header unsettambién debe establecer la condición "siempre" al configurar la nota:

Header always note X-Userid userid
Header always unset X-Userid

Úselo %{userid}ncomo marcador de posición para la variable (n de la 'nota interna', es decir, donde mod_headers guarda el valor de la variable.

Desde eldocumentos:

Header [condition] note header value

The optional condition argument determines which internal table 
of responses headers this directive will operate against. Despite the 
name, the default value of onsuccess does not limit an action to 
responses with a 2xx status code. Headers set under this condition are 
still used when, for example, a request is successfully proxied or 
generated by CGI, even when they have generated a failing status code.

información relacionada