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?

questionAnswers(1)

yourAnswerToTheQuestion