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
След рестарт на апача вече айпи адресите са си правилните и всички са щастливи и доволни , най-вече аз 🙂