Como passar cabeçalhos ao manipulador de erros remotos no Nginx

2

Eu tenho o servidor nginx que envia erros 404 para o apache httpd em 1.1.1.1:8081. Como posso passar todos os cabeçalhos originais para o servidor de erros?

Eu tenho a seguinte configuração:

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

Ao examinar cabeçalhos em 404.php, recebo ip original do cliente, mas nenhum cookie do cliente; Além disso, recebo uri request set to 404.php?remote=1 e não url que causou o erro 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
?>
    
por rlib 24.12.2015 / 17:36

1 resposta

2

Não é bonito, mas uma solução possível é usar um local nomeado com um passe de proxy para o manipulador de erros e adicionar quantos cabeçalhos personalizados forem necessários com as informações desejadas. Isso significa personalizar o arquivo 404.php também.

Por exemplo:

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;
}
    
por 27.12.2015 / 10:46