Ich konfiguriere nginx als Reverse-Proxy vor Tomcat 7. Ich habe der nginx-Konfiguration die folgenden Zeilen hinzugefügt:
set_real_ip_from 127.0.0.1;
...
location / {
proxy_pass http://tomcat;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Trotzdem sehe ich in Tomcat-Protokollen folgendes Bild:
127.0.0.1 - - [10/Jun/2013:11:25:48 +0600] "GET /app/welcome;jsessionid=6C1B02376C5F748C509B28FC7CE416C9 HTTP/1.0" 200 10571
127.0.0.1 - - [10/Jun/2013:11:25:48 +0600] "GET /app/welcome;jsessionid=0BBE0174C1F0E94FDF49610144E809D3 HTTP/1.0" 200 10571
127.0.0.1 - - [10/Jun/2013:11:25:48 +0600] "GET /app/welcome;jsessionid=AD48005AD453F3A0BE46F1AC978F145D HTTP/1.0" 200 10571
Gibt es eine Möglichkeit, Tomcat zu zwingen, den X-Real-IP-Header zu verwenden (und ihn in Protokolldateien zu schreiben), ohne die Web-App zu ändern?
internalProxies
erwartet einen regulären Ausdruck, keinen Stringliteral. Als solches127.0.0.1
sollte bitte sein127\.0\.0\.1
.Ich habe diese Frage über Google gefunden und möchte der genehmigten Antwort einen Kommentar hinzufügen:
Laut Dokumentation hat dieses Ventil (RemoteIpValve) standardmäßig keine Auswirkung auf die Werte, die in das Zugriffsprotokoll geschrieben werden. Um echte IPs im Protokoll zu erhalten, sollten Sie hinzufügen
auch zu AccessLogValve.
quelle
Ich suchte nach der gleichen Sache und fand Informationen, die mich zu der folgenden Lösung führten, indem ich im Internet recherchierte.
In Ihrer tomcat server.xml müssen Sie das Protokollierungsventilmuster bearbeiten, um die Werte aus dem eingehenden Header abzurufen .
In deinem
und ändern Sie das Muster in:
Mein Wert für das Vollzugriffsprotokoll sieht folgendermaßen aus:
Dies wird begleitet von der Nginx-Konfiguration von:
Weitere Informationen zu Protokollventilmustern in Tomcat finden Sie unter: Apache 7: Die Ventilkomponente
quelle
%{X-Forwarded-For}i
war der Schlüssel für mich, danke. Leider hat die neuere Antwort unter serverfault.com/a/746395/165500 nicht funktioniert.Ein weiteres nützliches Beispiel für die Tomcat-Konfiguration: internalProxies können mit der Pipeline (|) getrennt werden, da reguläre Ausdrücke akzeptiert werden.
Weitere Beispiele finden Sie im Tomcat-Dokument
quelle
Sie müssen mod_realip http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html ( http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Remote_IP_Filter) installieren ) oder mod_rpaf auf dem Apache-Server.
quelle