Excluya dominios específicos de Apache2 serverAlias ​​mientras usa un alias catch all * (comodín)

10

Tengo una aplicación web que necesita admitir dominios personalizados, en ese sentido, he configurado el siguiente servidor virtual basado en el nombre:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias * *.example.com www.example.com example.com
    RailsEnv production
    RackEnv production
    DocumentRoot /srv/www/example/current/public
    <Directory /srv/www/example/current/public>
             AllowOverride all
             Options -MultiViews FollowSymLinks
    </Directory>
    ErrorLog /srv/www/example/log/error.log
    TransferLog /srv/www/example/log/access.log
</VirtualHost>

Observe el * como el alias del servidor? que atrapa todos los dominios en ese servidor. Sin embargo, tengo otros sitios en este servidor que quiero excluir de esta lista. Es más económico para mí tener una lista de dominios excluidos que configurar manualmente todos los dominios con los que un usuario puede registrarse en este servicio como servidorAlias ​​...

Quizás esta no sea la mejor manera de hacerlo, pero estoy buscando ayuda, de la mejor manera (relativamente simple) para configurar una aplicación web que pueda capturar cualquier dominio, mientras permite que otros dominios específicos se enruten a diferentes aplicaciones .

Victor S
fuente

Respuestas:

12

Apache busca una coincidencia en el orden en que se definen los dominios. Si entiendo su problema correctamente, entonces se puede resolver definiendo sus hosts para que se excluyan antes de capturar todos los hosts.

<VirtualHost *:80>
    ServerName excluded.example.com
    ServerAlias  something.example.com ...
    ...
</VirtualHost>
<VirtualHost *:80>
    ServerName example.com
    ServerAlias * *.example.com www.example.com example.com
    RailsEnv production
    ...
</VirtualHost>
usuario9517
fuente
1
Sí, tiene razón, pero estoy desconcertado acerca de cómo hacer esto en una pila predeterminada de Ubuntu 10.4, donde todos los chanchullos se gestionan al tener un sitio disponible y directorios habilitados, y cada definición de host virtual existe en su propia exclusiva archivo ... ¿cómo controlo el orden en ese caso?
Victor S
Los archivos se cargan en orden alfabético (el orden de clasificación predeterminado para ls).
user9517
1
para una definición de sitio que debe ser lo primero, asígnele un nombre similar 000-excluded.example.com.confal del directorio disponible para sitios.
Brian Minton
Estaba buscando hacer exactamente lo mismo, y esto no funciona para mí. El VirtualHost excluded.example.com que tenía "ServerName excluded.example.com \ n Redirect / example.com/excluded " provocó que todas las solicitudes al VirtualHost más general fueran redirigidas (lo que definitivamente siguió al VirtualHost específico en la configuración).
quuxman