Php
在 Haproxy 後面的 PHP 中檢索外部 IP
我正在使用 Haproxy 來啟用在同一台機器上執行 websocket 伺服器和 Lighttpd web 伺服器。我想從 Lighttpd 伺服器上執行的 Web 應用程序中檢索機器的外部 IP 地址。
沒有 haproxy 這有效:
PHP
<?php $myip = $_SERVER['SERVER_ADDR']; $myurl = 'http://'.$myip.'/pathToProject/'; define('URL', $myurl); ?>
但在代理*$_SERVER後面$$ ‘SERVER_ADDR’ $$;* 返回 127.0.0.1 不適用於我正在使用的 PHP 框架。
haproxy.conf
global maxconn 4096 nbproc 1 defaults mode http frontend all 0.0.0.0:80 timeout client 86400000 default_backend www_backend acl is_websocket hdr(Upgrade) -i WebSocket acl is_websocket hdr_beg(Host) -i ws use_backend socket_backend if is_websocket backend www_backend balance roundrobin option forwardfor timeout server 30000 timeout connect 4000 server apiserver 127.0.0.1:8080 weight 1 maxconn 1024 check backend socket_backend balance roundrobin option forwardfor timeout queue 5000 timeout server 86400000 timeout connect 86400000 server apiserver 127.0.0.1:8082 weight 1 maxconn 1024 check
您需要
"option forwardfor"
在 HAproxy 配置文件中添加該選項,以便 HAproxy 將添加一個帶有訪問者真實 IP 地址的新標頭。之後,在您的 PHP 程式碼中,檢查 HTTP_X_FORWARDED_FOR 標頭,而不是 REMOTE_ADDR
foreach (getallheaders() as $name => $value) { echo "$name: $value<br>\n"; }
可以在此處找到完整的詳細答案:haproxy and forwarding client IP address to servers
從理論上講,這正是您可以解決的問題
option originalto
根據文件,在您的前端。
您的應用程序將不得不依賴 X-Original-To 標頭。