Laden...

Wie bekomme ich die Client IP-Adresse unter ASP.NET Core in Docker heraus?

Erstellt von Shojo vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.613 Views
S
Shojo Themenstarter:in
8 Beiträge seit 2015
vor 4 Jahren
Wie bekomme ich die Client IP-Adresse unter ASP.NET Core in Docker heraus?

Guten Tag die Runde,

ich habe eine ASP.NET Core 2.2 Anwendung einen Docker Container hinter einen Nginx Proxy https://github.com/jwilder/nginx-proxy am laufen.
Jetzt habe ich das Problem das ich über Request.HttpContext.Connection.RemoteIpAddress nur die IP 172.20.0.1 zurückbekomme statt die eigentliche IP des Clients.

Ich habe bereits die folgende Zeilen in der Startup.cs hinzugefügt:


app.UseForwardedHeaders(new ForwardedHeadersOptions
{
                ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
 });

und für den Nginx die /etc/nginx/proxy.conf angelegt mit den Inhalt;


proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
proxy_set_header X-Forwarded-Ssl $proxy_x_forwarded_ssl;
proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port;
proxy_set_header Proxy "";

Habe ich was übersehen?
Hat da wer ein Anstoß für mich? 🙂

Gruß
Shojo

16.806 Beiträge seit 2008
vor 4 Jahren

Ist UseForwardedHeaders auch wirklich die erste registrierte Middleware, wie es auch die Dokumentation sagt?
Das beachten leider die meisten nicht...

Ansonsten verwende ich das Snippet hier:


app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.All,
    ForwardLimit = null, // null = disable check
    RequireHeaderSymmetry = false,
    KnownProxies = { IPAddress.Parse("<IP Adresse 1>"), IPAddress.Parse("<IP Adresse n...>") },
});

S
Shojo Themenstarter:in
8 Beiträge seit 2015
vor 4 Jahren

Ja ich habe da die Doku sauber befolgt, aber dein Snippet brachte den gewünschten Erfolg 🙂

Ich danke dir für die Hilfe!