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 RewriteRule
está causando el bucle, al anteponer /a-uri
la 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.