¿Usando mod_rewrite para imitar hosts virtuales SSL?
-
08-06-2019 - |
Pregunta
¿Cuál es la mejor manera de reescribir de forma transparente una URL a través de una conexión SSL con Apache 2.2?
Apache 2 no admite de forma nativa varios hosts virtuales basados en nombres para una conexión SSL y he oído que mod_rewrite puede ayudar con esto.Me gustaría hacer algo como esto:
He configurado el servidor para que se pueda acceder a los sitios mediante
https://secure.example.com/dbadmin
pero me gustaría tener esto como https://dbadmin.example.com
¿Cómo lo configuro para que la regla de reescritura reescriba dbadmin.example.com en Secure.example.com/dbadmin, pero sin mostrar la reescritura en la barra de direcciones del cliente (es decir,el cliente seguirá viendo dbadmin.example.com), en todo https?
Solución
Configure un único VirtualHost para servir tanto a Secure.example.com como a dbadmin.example.com (lo que lo convierte en el único *:443 VirtualHost que logra esto).Luego puedes usar mod_reescritura para ajustar el URI para solicitudes a dbadmin.example.com:
<VirtualHost *:443>
ServerName secure.example.com
ServerAlias dbadmin.example.com
RewriteEngine on
RewriteCond %{SERVER_NAME} dbadmin.example.com
RewriteRule !/dbadmin(.*)$ /dbadmin$1
</VirtualHost>
Su certificado SSL deberá ser válido tanto para Secure.example.com como para dbadmin.example.com.Puede ser un certificado comodín como lo menciona Terry Lorber, o puede usar el sujetoAltName para agregar nombres de host adicionales.
Si tienes problemas, primero configúralo en <VirtualHost *>
y comprobar que funciona sin SSL.La conexión SSL y el certificado son una capa separada de complejidad que puede configurar después de que la reescritura de URI esté funcionando.
Otros consejos
A menos que su certificado SSL sea del tipo "comodín" o de múltiples sitios, no creo que esto funcione.La reescritura se mostrará en el navegador y el nombre en la barra de direcciones debe ser válido según el certificado, o sus usuarios verán un error de seguridad (que siempre pueden aceptar y continuar, pero eso no suena como lo que desea ).
Más aquí.
Hay apaches mod_rewrite, o puedes configurar apache para dirigir https://dbadmin.example.com a la ruta/a/example.com/dbadmin en el servidor
<VirtualHost *>
ServerName subdomain.domain.com
DocumentRoot /home/httpd/htdocs/subdomain/
</VirtualHost>