O cabeçalho unset parece não funcionar com o apache 2.4.10 e php-fpm

2

Estou tentando passar cabeçalhos do código php de volta para o log de acesso do apache usando cabeçalhos HTTP, da seguinte forma:

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

Com mod_php , o ID do usuário é inserido no log conforme o esperado e o cabeçalho não é definido antes de ser enviado ao cliente.

Quando executado via php-fpm, usando a seguinte linha, o ID do usuário não é inserido no log e não é desfeito nos cabeçalhos HTTP do cliente.

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

Originalmente eu estava usando apache_note , mas isso só está disponível com mod_php . Eu encontrei o acima como uma solução para passar dados do PHP para Apache / php-fpm ou nginx, mas não parece funcionar com o php-fpm.

Existe algo que eu preciso ativar ou definir para obter Header unset trabalhando em php-fpm?

Configuração do 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>
    
por Ian 24.11.2014 / 22:04

3 respostas

3

mod_proxy_fcgi adiciona cabeçalhos de resposta a r- > err_headers_out, o que significa que você deve usar pelo menos:

Header unset X-Userid always

Mas não há motivo para não usar os dois:

Header always unset X-Userid
Header unset X-Userid

Esta é uma parte infeliz da API do Apache que penetra nos mod_headers - os cabeçalhos podem residir em dois lugares, dependendo se eles devem persistir para respostas que não sejam bem-sucedidas.

    
por 03.12.2014 / 04:22
2

A partir da solução de problemas nos comentários, acho que isso é um bug: os cabeçalhos retornando de mod_proxy_fcgi parecem estar indisponíveis para mod_headers de qualquer forma e estão sendo combinados com os dados de mod_headers após o processamento .

Por enquanto, se você precisar que este comportamento funcione corretamente, talvez olhe para nginx ou lighttpd, ou dê um tapa em uma instância HAProxy ou Varnish na frente do Apache para fazer o registro e a manipulação de cabeçalho da maneira certa?

    
por 24.11.2014 / 23:53
0

Esta questão é antiga, mas pode ajudar alguém a procurar a sua solução final:

Como covener apontado com Header unset , você também deve definir a condição 'always' ao definir a nota:

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

Use %{userid}n como espaço reservado para a variável (n da 'nota interna', ou seja, mod_headers salva o valor da variável.

Dos documentos :

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.
    
por 31.08.2017 / 23:29