Railsy pokazują IP jako 127.0.0.1 przy dostępie z prywatnej karty sieciowej, ale Nginx pokazuje poprawny adres IP. Publiczny adres IP jest przesyłany dalej
Uruchamiamy aplikację Rails na Unicorn + Nginx. Serwer ma dwie używane karty sieciowe.eth0
obsługuje żądania publicznego internetu ieth2
obsługuje żądania z naszej prywatnej sieci.
Kiedy przychodzi żądanieeth0
, dzienniki nginx pokazują publiczny adres IP, a dzienniki Rails również pokazują ten adres IP. Jednak, gdy przychodzi żądanieeth2
, dzienniki nginx pokazują prywatny adres IP poprawnie (np.192.168.5.134
), ale pokazują się dzienniki Rails127.0.0.1
.
Wygląda to na publiczne prośbyeth0
dostać ichX-Forwarded-For
nagłówek ustawiony poprawnie, ale nie dzieje się tak w przypadku żądańeth2
.
Nasza konfiguracja nginx jest dość prosta:
upstream example.com {
server unix://var/www/example.com/shared/sockets/unicorn.socket fail_timeout=0;
}
...
server {
listen 443 ssl;
...
location @example.com {
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real_IP $remote_Addr;
proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if ($host ~* "^(.+)\.example.com$") {
set $subdomain $1;
}
proxy_pass http://example.com;
}
Jakieś pomysły?