ich hab folgendes Problem und hoffe mal mir kann jemand helfen.
ich möchte zwei oder mehr apache Server hinter den LoadBalancer HAproxy klemmen.
in meinem Test Aufbau klappt das auch schon soweit.
aber ich hab da Folgendes Problem.
Der HA Proxy ersetzt mir in dem Array $_SERVER den wert [REMOTE_ADDR] durch die IP des LoadBalancer
es gibt zwar die Möglichkeit im HAproxy die ursprüngliche IP mitzugeben diese landet aber dann in [HTTP_X_FORWARDED_FOR]
Code: Select all
ausgabe von print_r($_SERVER);
Array ( [HTTP_HOST] => 192.168.80.100 [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_LANGUAGE] => de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 [HTTP_ACCEPT_ENCODING] => gzip,deflate [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7 [HTTP_KEEP_ALIVE] => 300 [HTTP_CONNECTION] => close [HTTP_REFERER] => http://192.168.80.100/ [HTTP_COOKIE] => phpbb2mysql_data=a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bs%3A0%3A%22%22%3Bs%3A6%3A%22userid%22%3Bs%3A1%3A%222%22%3B%7D; style_cookie=printonly; phpbb3_m31p5_u=1; phpbb3_m31p5_k=; phpbb3_m31p5_sid=d59e52012962fb9659d0e7250ed2bd5f
[HTTP_X_FORWARDED_FOR] => 192.168.80.1 <========
[PATH] => /usr/local/bin:/usr/bin:/bin [SERVER_SIGNATURE] =>
Apache/2.2.3 (Debian) PHP/5.2.0-8+etch13 Server at 192.168.80.100 Port 80
[SERVER_SOFTWARE] => Apache/2.2.3 (Debian) PHP/5.2.0-8+etch13 [SERVER_NAME] => 192.168.80.100 [SERVER_ADDR] => 10.0.0.102 [SERVER_PORT] => 80
[REMOTE_ADDR] => 10.0.0.2 <========
[DOCUMENT_ROOT] => /data/htdocs/ [SERVER_ADMIN] => webmaster@localhost [SCRIPT_FILENAME] => /data/htdocs/ip.php [REMOTE_PORT] => 33915 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /ip.php [SCRIPT_NAME] => /ip.php [PHP_SELF] => /ip.php [REQUEST_TIME] => 1228496619 [argv] => Array ( ) [argc] => 0 )
In der index.php einer Seite oben einfügen:
Code: Select all
<?php
if ($_SERVER['REMOTE_ADDR'] == '10.0.0.2' OR $_SERVER['REMOTE_ADDR'] == '10.0.0.3'){
$headers = apache_request_headers();
$_SERVER['REMOTE_ADDR'] = $headers["X-Forwarded-For"];
}?>dann hab ich noch die Option transparent im HAproxy gefunden, diese sollte dafür sorgen das [REMOTE_ADDR] unverändert bleibt aber leider bekomm ich dann einen
" 400 Bad request " zurück.
Hier mal mein HAproxy config
Code: Select all
global
maxconn 32000
#ulimit-n 65536
daemon
#nbproc 2
#debug
pidfile /var/run/haproxy-private.pid
#log localhost daemon debug
defaults
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen stats 192.168.80.100:7000
mode http
transparent
stats uri /
stats realm security
stats auth admin:admin
listen webfarm 192.168.80.100:80
balance roundrobin
#transparent
option forwardfor
mode http
option httplog
option httpchk
option forwardfor
option abortonclose
option httpclose
retries 3
redispatch
cookie JSESSIONID prefix
option httpchk HEAD /check.txt HTTP/1.0
server webA 10.0.0.101:80 cookie A check
server webB 10.0.0.102:80 cookie B check
Das 10ner Netz sollte nur für die interne komunikation hergenommen werden.
Das 192.168.80ner Netz werden dann später die Öffentlichen IP adressen.
Ich wollte eigentlich den Komunikations weg so aufbauen
Code: Select all
Client --> LoadBalancer --> Apache server --> Client
|
|--> Apache server --> Client
:
Gruß Preussner