Как передать заголовки удаленному обработчику ошибок в Nginx

У меня есть сервер nginx, который отправляет 404 ошибки в apache httpd по адресу 1.1.1.1:8081. Как передать все исходные заголовки на сервер ошибок?

У меня следующая конфигурация:

server {
   error_page 404 = http://1.1.1.1:8081/404.php?remote=1;
}

При проверке заголовков в 404.php я получаю исходный IP-адрес клиента, но не получаю cookie от клиента; Кроме того, я получаю URI запроса, равный 404.php? remote = 1 , а не URL-адрес, который вызвал ошибку 404:

<?php
  // 404.php file
  file_put_content("log.txt", $_SERVER['REQUEST_URI'], FILE_APPEND); // :(
  file_put_content("log.txt", $_SERVER['REMOTE_ADDR'], FILE_APPEND); // Ok
  file_put_content("log.txt", $_COOKIE['MyCookie'], FILE_APPEND); // :( empty
?>
2
задан 24 December 2015 в 18:36
1 ответ

Это не очень красиво, но одним из возможных решений является использование именованного местоположения с прокси-пассом к вашему обработчику ошибок, а затем добавить столько пользовательских заголовков, сколько вам нужно, с нужной информацией. Это означает также настройку файла 404.php.

Например:

error_page 404 = @handler;

location @handler {
    rewrite ^ /404.php?remote=1? break;
    proxy_set_header X-Request $request_uri;
    proxy_set_header X-Remote $remote_addr;
    proxy_set_header X-Cookie $cookie_some_cookie_name;
    proxy_pass http://1.1.1.1:8081;
}
1
ответ дан 3 December 2019 в 12:42

Теги

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