Ich habe einen Server, auf dem wir das folgende Setup haben:
http://example.com -(REDIRECT)-> https://example.com
Nun möchten wir einen einfachen SSL-Proxy hinzufügen (auf derselben Maschine, auf die auch der A-Eintrag verweist), der Folgendes tut:
https://otherexample.com -(PROXY)-> https://example.com/a-uri
Aus irgendeinem Grund landen wir immer in einer Schleife. Das hier zeigt das Modsecurity-Protokoll:
GET /a-uri/a-uri/a-uri/a-uri/a-uri/a-uri/a-uri/a-uri/a-uri/...
HTTP/1.1
Host: otherexample.com
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: nl-BE,nl;q=0.9
X-Forwarded-For: CLIENTIP, SERVERIP, SERVERIP, SERVERIP, ...
X-Forwarded-Host: otherexample.com, otherexample.com, otherexample.com, ...
X-Forwarded-Server: otherexample.com, otherexample.com, otherexample.com, ...
Apache-Konfigurationen, die ich ausprobiert habe:
ProxyPreserveHost On
SSLEngine on
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyPass / https://example.com/a-uri/
ProxyPassReverse / https://example.com/a-uri/
Umschreibmaschine:
RewriteRule ^/(.*) https://example.com/a-uri/$1 [P,l]
Antwort1
Dies RewriteRule
verursacht eindeutig die Schleife, indem es /a-uri
der URL jeder Anforderung etwas voranstellt und sie zur erneuten Verarbeitung zurücksendet.
Sie sagen nicht, ob diese Anweisung Teil der serverweiten Konfiguration ist, aber es scheint, dass sie es wahrscheinlich ist. Sie sollte im virtuellen Host für otherexample.com enthalten sein, sodass sie nur für diesen Host gilt. So:
<VirtualHost *:443>
ServerName otherexample.com
RewriteEngine on
RewriteRule ^/(.*) https://example.com/a-uri/$1 [P,L]
</VirtualHost>
Oder vielleicht klarer:
<VirtualHost *:443>
ServerName otherexample.com
ProxyPass / https://example.com/a-uri/
ProxyPassReverse / https://example.com/a-uri/
</VirtualHost>
Antwort2
Ich konnte das Problem mit Apache nicht lösen. Wir haben einen Nginx-Proxy ausprobiert, der für uns ohne große Probleme besser zu funktionieren scheint.