У меня есть сервер 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
?>
Это некрасиво, но одно из возможных решений - использовать именованное местоположение с прокси-передачей для вашего обработчика ошибок, а затем добавить столько настраиваемых заголовков, сколько вам нужно, с желаемой информацией. Это также означает настройку файла 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;
}