Przekazanie Real IP z Nginx do Apache

Stawiając Nginx jako proxy przed serwerami Apache nie chcielibyśmy tracić informacji o IP odwiedzających nas klientów. Zachowanie jej wymaga jednak albo daleko idących zmian konfiguracyjnych w Apache albo użycia odpowiednich modułów.

Konfigurację należy zacząć od ustawienia proxy tak, aby przekazywać niezbędne nagłówki. W tym celu należy dodać odpowiednie dyrektywy i użyć wbudowanych zmiennych Nginx:

server {
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Nagłówek X-Forwarded-For odpowiada za przekazanie do łańcucha kolejnych adresów IP przez które przechodzi nasz request i zachowanie oryginalnego adresu IP żądania. Nagłówek X-Real-IP (wg mojej wiedzy) odpowiada za przekazanie oryginalnego IP żądania. Niemniej, ten ostatni może być zmieniany przez poszczególne serwery przez które przechodzi żądanie.

Kiedy nasza konfiguracja proxy przekazuje już odpowiednie nagłówki musimy zająć się serwerami Apache. W standardowej konfiguracji logów i raportowania {Referer} zostanie przekazany jako ostatni element łańcucha X-Forwarded-For. Najczęściej zatem otrzymamy 127.0.0.1 albo ::1 (oczywiście w przypadku jednomaszynowych konfiguracji 🙂 ). Aby jako {Referer} przekazywano rzeczywiste IP klienta najprościej użyć modułu rpaf, który dostępny jest w większości standardowych repozytoriów.

Po instalacji i uruchomieniu modułu (co wykonujemy wg standardowych procedur 😉 ) możemy przystąpić do jego konfiguracji. Standardowe ustawienia obejmują:

<IfModule rpaf_module>
    RPAFenable On

    RPAFsethostname On

    RPAFproxy_ips 127.0.0.1 ::1
</IfModule>

RPAFenable włącza konfigurację modułu, natomiast RPAFproxy_ips pozwala zdefiniować które z IP w łańcuch X-Forwarded-For są adresami naszych serwerów proxy. Podanie tej informacji umożliwia wycięcie z łańcucha IP naszych wewnętrznych adresów i pozostawienie rzeczywistego adresu IP żądania.

Szczegółową konfigurację i opis modułu znajdziemy na stronie projektu rpaf na GitHub.

Tak wprowadzona konfiguracja Apache i Nginx pozwoli nam na przekazanie do logów i naszych aplikacji web realnego adresu IP klienta, który połączył się do naszego serwera.

Podziel się:

Mikołaj Niedbała

I'm a Poland based IT administrator, linux administrator and IT engineer creating professional IT infrastructure solutions based on Linux and virtual environments.

One thought to “Przekazanie Real IP z Nginx do Apache”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *