Apache modsec + bucle de proxy ssl

Apache modsec + bucle de proxy ssl

Tengo un servidor donde tenemos la siguiente configuración:

http://example.com -(REDIRECT)-> https://example.com

Ahora nos gustaría agregar un proxy SSL simple (en la misma máquina a la que también apunta el registro A) que hará lo siguiente:

https://otherexample.com -(PROXY)-> https://example.com/a-uri

Por alguna razón siempre terminamos en un bucle, esto es lo que muestra el registro de modsecurity:

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, ...

Configuraciones de Apache que probé:

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/

Reescribir motor:

RewriteRule ^/(.*) https://example.com/a-uri/$1 [P,l]

Respuesta1

Claramente RewriteRuleestá causando el bucle, al anteponer /a-urila URL de cada solicitud y enviarla nuevamente para que se procese nuevamente.

No dice si esa directiva es parte de la configuración de todo el servidor, pero parece que probablemente lo sea. Debe estar contenido dentro del host virtual de otherexample.com, de modo que solo se aplique a ese host. Como esto:

<VirtualHost *:443>
  ServerName otherexample.com
  RewriteEngine on
  RewriteRule ^/(.*) https://example.com/a-uri/$1 [P,L]
</VirtualHost>

O, tal vez más claro:

<VirtualHost *:443>
  ServerName otherexample.com
  ProxyPass        / https://example.com/a-uri/
  ProxyPassReverse / https://example.com/a-uri/
</VirtualHost>

Respuesta2

No pude solucionar el problema con Apache. Probamos un proxy nginx y parece funcionar mejor para nosotros sin muchos problemas.

información relacionada