
Estou tentando passar cabeçalhos do código php de volta para o accesslog do Apache usando cabeçalhos HTTP, assim:
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 esperado e o cabeçalho é desdefinido antes de ser enviado ao cliente.
Ao executar via php-fpm, usando a linha a seguir, o ID do usuário não é inserido no log e não é desmarcado 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
. Encontrei o acima como uma solução para passar dados de PHP para Apache/php-fpm ou nginx, mas parece não funcionar com php-fpm.
Há algo que preciso ativar ou configurar para Header unset
funcionar no php-fpm?
Configuração 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>
Responder1
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á razão para não usar ambos:
Header always unset X-Userid
Header unset X-Userid
Esta é uma parte infeliz da API Apache que se transforma em mod_headers - os cabeçalhos podem residir em dois lugares, dependendo se devem persistir em respostas sem sucesso.
Responder2
Pela solução de problemas nos comentários, acho que isso é um bug - os cabeçalhos que retornam mod_proxy_fcgi
parecem estar indisponíveis mod_headers
de alguma forma e estão sendo combinados com os dados mod_headers
após o processamento.
Por enquanto, se você precisa que esse comportamento funcione corretamente, talvez dê uma olhada no nginx ou lighttpd, ou coloque uma instância HAProxy ou Varnish na frente do Apache para fazer o registro e a manipulação do cabeçalho da maneira certa?
Responder3
Esta questão é antiga, mas pode ajudar alguém que procura a solução final:
Como Covener apontou, Header unset
você também deve definir a condição 'sempre' 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, onde mod_headers salva o valor da variável.
Dedocumentos:
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.