Nginx

如何將標頭傳遞給 Nginx 中的遠端錯誤處理程序

  • December 27, 2015

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

這並不漂亮,但一種可能的解決方案是使用命名位置和代理傳遞給您的錯誤處理程序,然後根據需要添加盡可能多的自定義標頭以及所需的資訊。這也意味著自定義 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;
}

引用自:https://serverfault.com/questions/745158