Apache Modsec + SSL-Proxy-Schleife

Apache Modsec + SSL-Proxy-Schleife

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 RewriteRuleverursacht eindeutig die Schleife, indem es /a-urider 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.

verwandte Informationen