Ich versuche, Apache mit SSl- und Proxy-SSL-Anforderungen an meine Tomcat-Instanz einzurichten. Ich glaube, ich habe das SSL zum Laufen gebracht, aber es gibt immer noch einen Fehler, der auftaucht:
Bad Gateway The proxy server received an invalid response from an upstream server.
* SSL Virtualhost *
LoadModule ssl_module modules/mod_ssl.so
Listen 443
<VirtualHost _default_:443>
SSLEngine On
SSLProxyEngine On
DocumentRoot "/var/apache-tomcat-7.0.34/webapps/Learn2Gether/"
SSLCertificateFile /etc/pki/tls/learn2gether/cert-6090205098829887.pem
SSLCertificateKeyFile /etc/pki/tls/learn2gether/private_key_unlocked.pem
SSLCertificateChainFile /etc/pki/tls/learn2gether/rubca-chain.pem
BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
ServerName www.learn2gether.rubel.rub.de
ServerAlias learn2gether.rubel.rub.de
#RewriteRule ^\/$ /Learn2Gether/index.html [PT]
##RewriteRule ^/(.*)$ /$1 [PT]
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/
</VirtualHost>
~
HTTP VH-Umleitung zu HTTPS
NameVirtualHost *:80
<VirtualHost _default_:80>
ServerName www.learn2gether.rubel.rub.de
ServerAlias learn2gether.rubel.ruhr-uni-bochum.de
RewriteEngine on
# DocumentRoot "/var/apache-tomcat-7.0.34/webapps/Learn2Gether/"
RewriteCond %{HTTP_HOST} !^learn2gether.rubel.ruhr-uni-bochum\.de [NC]
RewriteRule ^/(.*)$ http://learn2gether.rubel.ruhr-uni-bochum.de/$1 [R=301,L]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}$1 [L]
#RewriteRule ^\/$ /Learn2Gether/index.html [PT]
#RewriteRule ^/(.*)$ /$1 [PT]
#ProxyPass / https://localhost:8443/
#ProxyPassReverse / https://localhost:8443/
</VirtualHost>
Tomcats Apache-Anschluss
<Connector port="8443"
protocol="HTTP/1.1"
connectionTimeout="20000"
compression="on"
compressionMinSize="32"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,application/x-javascript,text/css"
redirectPort="8443"
URIEncoding="UTF-8"
proxyPort="443"
proxyName="learn2gether.rubel.ruhr-uni-bochum.de"
scheme="https"
secure="true"
/>
apache-2.2
ssl
tomcat
mod-rewrite
virtualhost
SaifDeen
quelle
quelle
Antworten:
Wenn Sie http oder https an https weitergeben, müssen Sie Apache als SSL- Client konfigurieren . Wenn Apache mit Ihrem Tomcat-Server kommuniziert, fungiert er schließlich als Webclient. Apache funktioniert jedoch normalerweise nicht sofort als SSL-Client.
Zunächst würde ich vorschlagen, dass Sie zuerst überlegen, ob Sie dies wirklich brauchen, warum Sie dies tun. Die übliche Praxis, wenn Tomcat und Apache auf demselben Server leben, besteht darin, dass Tomcat nur einfaches http (oder Ajp) bereitstellt und SSL auf den Apache-Server auslagert. Es ist normalerweise nicht erforderlich, SSL zwischen dem Apache- und dem Tomcat-Server zu haben. Wenn Sie keine SSL auf dem Tomcat-Server haben, sparen Sie sich viel Ärger.
Sie müssen lediglich einen HTTP-Connector an Port 8080 in Ihrer Tomcat-Instanz definieren und alle Anforderungen von Ihrem virtuellen Apache-SSL-Host aus umleiten:
Wenn Sie jedoch weiterhin entscheiden, dass Sie SSL zu SSL-Proxy benötigen, müssen Sie weitere Änderungen hinzufügen. Apache muss sowohl als SSL-Client als auch als SSL-Server fungieren können. Wenn Apache über https mit einem anderen Server kommuniziert, übernimmt es schließlich die Rolle des Clients. Das ist nicht so einfach und es gibt viele Probleme, auf die Sie stoßen können. Sie müssen Folgendes hinzufügen:
In diesen Pfad müssen Sie dann das CA-Zertifikat einfügen, mit dem das Zertifikat signiert wird, das von dem Server verwendet wird, mit dem Sie kommunizieren. Wenn Sie ein "selbstsigniertes" Zertifikat verwenden, müssen Sie es in dieses Verzeichnis stellen.
Sobald Sie dies getan haben, müssen Sie "c_rehash" in diesem Verzeichnis ausführen. c_rehash ist Teil einer Standard-OpenSL-Distribution. c_rehash erstellt in diesem Verzeichnis Hash-Aliase. Apache braucht diese.
Um zu testen, ob alles vorhanden ist, können Sie Folgendes tun:
Wenn die Verbindung erfolgreich ist, erhalten Sie eine Eingabeaufforderung, in die Sie eine Anfrage eingeben können. Probieren Sie einfach etwas aus.
und sehen, ob Sie etwas bekommen. Wenn dieser Test erfolgreich ist, sollte auch Apache funktionieren.
Sie können jetzt die Anweisungen ReWriteRule oder Proxy hinzufügen, um die Verbindungen an Ihren https-Server weiterzuleiten.
quelle