nginx+apache = forward wrong client ip address

От известно време наблюдавам този проблем при моите сървъри. Накратко: ползвам apache за динамичното съдаржание на страниците, a nginx за статичното , като nginx-а препраща съответните неща към апача. Обаче идва един проблем, в логовете на апача заявките от потребителите идват от айпи адреса на nginx-a , не от реалните айпи адреси на клиентите. Това не е чак толкова голяма болка за умиране но дразни. При мен конфа на nginx-a e:


server {
listen 1.2.3.4:80;
server_name www.ime.bg;
access_log /var/log/nginx/www.ime.bg.access_log;
error_log /var/log/nginx/www.ime.bg.error_log;
location ~* \\.(jpg|jpeg|gif|png|mp3|zip|css|tgz|gz|rar|bz2|doc|xls|exe|pdf|

ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|docx|xml|xlsx)$ {
root /var/www/www.ime.bg;
index index.php index.html;
access_log off;
expires 30d;
}
location ~ /\\.ht {
deny all;
}
location / {
proxy_pass http://1.2.3.4:81;
proxy_set_header   Host             $host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
client_max_body_size    900m;
client_body_buffer_size 128k;

}
}


На апача е:



ServerAdmin email@ime.bg

DocumentRoot /var/www/www.ime.bg
ServerName www.ime.bg
ServerAlias ime.bg
ErrorLog /var/log/apache2/www.ime.bg-error_log
CustomLog /var/log/apache2/www.ime.bg-access_log common


В това положение всичко работи освен горе споменатия малък проблем 🙂 Решение на проблема намерих в един модул за апача , след като през цялото време си мислих че проблема не е от него а от руския уеб сървър. Инсталирах libapache2-mod-rpaf , което е много важно защото при мен сайтовете не работят на 127.0.0.1 трябва да променим конфа на модула за да се получи желания ефект. Конфа се намира в /etc/apache2/mods-enabled/rpaf.conf , и трябва да преставлява нещо такова:


RPAFenable On
RPAFsethostname On
RPAFproxy_ips 1.2.3.4


След рестарт на апача вече айпи адресите са си правилните и всички са щастливи и доволни , най-вече аз 🙂