如何在 Nginx 中将标头传递给远程错误处理程序

如何在 Nginx 中将标头传递给远程错误处理程序

我有一台 nginx 服务器,它会向 1.1.1.1:8081 上的 apache httpd 发送 404 错误。我该如何将所有原始标头传递到错误服务器?

我有以下配置:

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

当检查 404.php 中的标头时,我获得了客户端原始 IP,但没有来自客户端的 cookie;此外,我获得了设置为的请求 uri 404.php?remote=1,而不是导致 404 错误的 url:

<?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
?>

答案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;
}

相关内容