Сброс заголовка, кажется, не работает с апачскими 2.4.10 и php-fpm

Я пытаюсь передать заголовки из кода php назад к апачскому accesslog при помощи HTTP-заголовков, как так:

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

С mod_php, идентификатор пользователя вставляется в журнал как ожидалось, и заголовок сброшен прежде чем быть отправленным клиенту.

При выполнении через php-fpm, использовании следующей строки, идентификатор пользователя не вставляется в журнал и не сброшен в клиентских HTTP-заголовках.

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

Первоначально я использовал apache_note но это только доступно с mod_php. Я нашел вышеупомянутое как решение для передающих данных от PHP до Apache/php-fpm или nginx, но это, кажется, не работает с php-fpm.

Есть ли что-то, что я должен включить или установить для получения Header unset работа под php-fpm?

Виртуальная конфигурация хоста:

<VirtualHost *:80>
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9001/web/ee2/sites/site.com/$1
    ServerAdmin webmaster@site.dev
    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>
2
задан 25 November 2014 в 02:14
3 ответа

mod_proxy_fcgi добавляет заголовки ответа на r-> err_headers_out, что означает, что вы должны использовать как минимум:

Header unset X-Userid always

Но нет причин не использовать оба:

Header always unset X-Userid
Header unset X-Userid

Это неудачная часть API Apache, которая перетекает в mod_headers - заголовки могут жить в два места, в зависимости от того, предназначены ли они для того, чтобы сохраняться в случае неудачных ответов.

3
ответ дан 3 December 2019 в 09:35

Судя по устранению неполадок в комментариях, я думаю, что это ошибка - заголовки, возвращаемые из mod_proxy_fcgi , кажутся недоступными для mod_headers каким-либо образом , и объединяются с данными из mod_headers после обработки.

На данный момент, если вам нужно, чтобы это поведение работало правильно, возможно, посмотрите на nginx или lighttpd, или подключите экземпляр HAProxy или Varnish в перед Apache для правильного ведения журнала и обработки заголовков?

2
ответ дан 3 December 2019 в 09:35

Это старый вопрос, но он может помочь тем, кто ищет окончательное решение:

Как указано в covener с Header unset , вы также должны установить условие «всегда» при установке примечания:

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

Используйте % {userid} n в качестве заполнителя для переменной (n из «внутренней заметки», то есть mod_headers сохраняет значение переменной.

Из документов :

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.
0
ответ дан 3 December 2019 в 09:35

Теги

Похожие вопросы