Apache-ReverseProxy mit mehreren Locations
David Tibbe
- webserver
Hallo zusammen,
für eine Anwendung nutze ich einen Apache als Reverse-Proxy. Der Server soll zu verschiedenen Backends proxien. Dazu habe ich folgende VHost-Konfiguration erstellt:
<VirtualHost *:443>
DocumentRoot "c:\Program Files (x86)\Apache\htdocs"
<Directory />
Options None
AllowOverride None
</Directory>
ErrorLog "logs/ssl-error.log"
LogLevel trace6
LogLevel ssl:warn
CustomLog "logs/ssl-access.log" combined
SSLEngine on
SSLCertificateFile "c:\Program Files (x86)\Apache\ssl\server.crt"
SSLCertificateKeyFile "c:\Program Files (x86)\Apache\ssl\server.key"
SSLCipherSuite EECDH+AES:EDH+AES:RSA+AES:3DES:!RC4:!aNULL:!eNULL:!EXP:!MEDIUM:!LOW:!MD5
SSLProtocol -ALL +TLSv1 +TLSv1.1 +TLSv1.2
<Location /OtherLocation>
ProxyPass http://localhost:8001/
ProxyPassReverse http://localhost:8001/
</Location>
<Location />
ProxyPass http://localhost:8002/
ProxyPassReverse http://localhost:8002/
</Location>
</VirtualHost>
Nun rufe ich die URL https://localhost/files/styles/styles.css auf. Diese wird mir auch korrekt ausgegeben, sie ist von http://localhost:8002/ serviert wurden (etwas gekürzt):
[Wed May 28 10:01:24.551203 2014] [core:trace5] [pid 3488:tid 1008] protocol.c(616): [client ::1:50147] Request received from client: GET /files/styles/styles.css HTTP/1.1
[Wed May 28 10:01:24.551203 2014] [core:trace3] [pid 3488:tid 1008] request.c(236): [client ::1:50147] request authorized without authentication by access_checker_ex hook: /files/styles/styles.css
[Wed May 28 10:01:24.551203 2014] [proxy_http:trace1] [pid 3488:tid 1008] mod_proxy_http.c(59): [client ::1:50147] HTTP: canonicalising URL //localhost:8002/files/styles/styles.css
[Wed May 28 10:01:24.551203 2014] [proxy_http:trace1] [pid 3488:tid 1008] mod_proxy_http.c(1923): [client ::1:50147] HTTP: serving URL http://localhost:8002/files/styles/styles.css
Wenn ich jetzt aber https://localhost/OtherLocation aufrufe, so wird ebenfalls versucht, die Anfrage von jenem Backend-Server beantworten zu lassen:
[Wed May 28 10:01:28.092464 2014] [core:trace5] [pid 3488:tid 1008] protocol.c(616): [client ::1:50147] Request received from client: GET /OtherLocation HTTP/1.1
[Wed May 28 10:01:28.092464 2014] [core:trace3] [pid 3488:tid 1008] request.c(236): [client ::1:50147] request authorized without authentication by access_checker_ex hook: /OtherLocation
[Wed May 28 10:01:28.092464 2014] [proxy_http:trace1] [pid 3488:tid 1008] mod_proxy_http.c(59): [client ::1:50147] HTTP: canonicalising URL //localhost:8002/OtherLocation
[Wed May 28 10:01:28.092464 2014] [proxy:debug] [pid 3488:tid 1008] proxy_util.c(2168): [client ::1:50147] AH00944: connecting http://localhost:8002/OtherLocation to localhost:8002
Das Apache-Handbuch sagt doch eigentlich, dass der spezifischste Location-Container genutzt wird. Im letzten Fall sollte dies doch der Proxy zum Backend auf Port 8001 sein.
Als Apache kommt der Apache 2.4.9 auf Windows (Builds von der ApacheLounge) zum Einsatz.
Hat jemand eine Idee?
Danke & Grüße,
David