Wozu dient der Redirect-Port in Tomcat?

13

Es ist schwierig, die Tomcat-Dokumentation zu verstehen, und wenn Sie sich server.xml ansehen, werden Sie eine Reihe von Ports finden, die möglicherweise schwer zu verstehen sind, da sie in der Dokumentation nicht richtig oder nicht ausführlich erklärt sind.

Zum Beispiel diese Zeile in der Konfigurationsdatei server.xml

<Connector port="8345" protocol="AJP/1.3" redirectPort="9875" />

Und hier finden Sie noch einen weiteren Redirect-Port:

<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" /> 

Ich verstehe, was der Anschluss macht. Im ersten Fall erstellen Sie damit einen Worker in Apache und senden ihn dorthin. Im zweiten Fall öffnen Sie einen Port, um direkt auf Tomcat zuzugreifen. Wenn es jedoch um den Redirectport geht, werden die Dinge unscharf.

Hier ist die Erklärung der Tomcat-Dokumentation für den Ajp-Port:

Wenn dieser Connector Nicht-SSL-Anforderungen unterstützt und eine Anforderung empfangen wird, für die ein Abgleich einen SSL-Transport erfordert, leitet Catalina die Anforderung automatisch an die hier angegebene Portnummer um.

Ich wähle immer einen zufälligen Redirect-Port über 1024 und es funktioniert,

Aber wann würde dies in die Praxis umgesetzt werden? Woher weiß es, dass für eine Anforderung ein SSL-Transport erforderlich ist?

Ich habe einen Satellitenserver, auf dem ein Tomcat-Modul ausgeführt wird. Dieses Modul wird aktiviert, indem der Datenverkehr mit Apache vom Hauptserver zum AJP-Connector und umgekehrt umgeleitet wird.

Auf dem Hauptserver wird https in Apache erzwungen. Bedeutet dies, dass alle Anfragen verschlüsselt oder im Klartext an den Satellitenserver gesendet werden? Ich weiß, dass der Zugriff auf den Satellitenserver über Port 8080 nicht verschlüsselt ist. Ich frage mich jedoch, ob dies auch für den Verkehr gilt, der zum Hauptserver umgeleitet wird, und wo dieser Umleitungsport wirksam wird.

Ulukai
quelle

Antworten:

5

Wie in der Dokumentation definiert, wird der Umleitungsport angezeigt, wenn eine SSL-Anforderung an den Server gesendet wird. Da der http-Connector-Port keine SSL-Anforderungen verarbeiten kann, wird er an den definierten Port umgeleitet. Es muss sich jedoch um einen anderen in der Datei server.xml definierten Abschnitt handeln, in dem der definierte Umleitungsport als Connector-Port für die Verarbeitung von SSL-Anforderungen fungiert. Wenn Sie beispielsweise möchten, dass http-Anforderungen von Port 80 und https-Anforderungen von Port 443 verarbeitet werden, sieht die Datei server.xml folgendermaßen aus:

<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />

<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" scheme="https" secure="true" sslProtocol="TLS" keystoreFile="/path/to/kestorefile" keystorePass="my_keystore_password"/>

Keystorefile ist das SSL-Zertifikat Ihrer Website.

Wenn Sie den anderen Abschnitt nicht mit Umleitungsport als Connector-Port konfigurieren, werden Ihre Anforderungen nicht an diesen Port umgeleitet. Wenn die Website beispielsweise keine SSL-Anforderungen unterstützt und Sie versuchen, eine HTTPS-Anforderung an diese Website zu senden, wird im Browser ein Fehler wie " Sichere Verbindung fehlgeschlagen" angezeigt.

Gaurav Pundir
quelle
Meinetwegen. Was ist mit der Konfiguration für Ajp im Gegensatz zu http? Ist es auch eine gute Idee, Ports unter 1024 zu verwenden, wie Sie es erwähnen? Das würde bedeuten, dass Tomcat als Root ausgeführt wird, und das ist nicht gut.
Ulukai
1
Ich habe nicht viel Ahnung über Ajp, aber Umleitung muss genauso funktionieren wie http. Die Verwendung von Ports unter 1024 liegt ganz bei Ihnen. 80 und 443 sind Standardports für das https- und https-Protokoll. Sie müssen nicht explizit in der URL erwähnt werden. Wenn Sie nicht standardmäßige Ports verwenden möchten, liegt es an Ihnen. Wenn Sie tomcat auch mit root ausführen, hängt dies von der bereitgestellten Anwendung ab. Wenn Sie Ihrer Anwendung aus Sicherheitsgründen nicht vertrauen, dürfen Sie tomcat nicht mit root ausführen. Andernfalls können Sie Apache oder Nginx als Proxy verwenden, um auf den Ports 80 und 443 ausgeführt zu werden und Ihre Anfrage an den Tomcat umzuleiten.
Gaurav Pundir
Ich werde beachten Sie, dass iptablesauch gut für die Weiterleitung zu Tomcat arbeitet unter anderen Ansätzen .
SeldomNeedy
Diese Erklärung ist unvollständig. Wenn Sie von Nicht-SSL zu einem SSL-Port umleiten, reicht es nicht aus, den Zielconnector in server.xml aufzunehmen. Es ist auch erforderlich, den Abschnitt <security-constraint> in web.xml zu konfigurieren. Siehe stackoverflow.com/questions/9526425/…
LuisColorado