2009-07-27 8 views
8

Ce que je suis en train de réaliser est la suivante: Je veux avoir de nombreux sous-domaines tels que abc.domain.com rediriger vers une URL telle que www.domain.com/something?subdomain=abcMise en place sous-domaine Wildcard (avec proxy inverse) sur apache 2.2.3

Depuis que je redirige vers un domaine entièrement qualifié, j'ai dû utiliser un proxy inverse pour éviter le changement de l'URL dans le navigateur. (En utilisant le drapeau [P] et en tournant sur le module mod_proxy et quelques autres modules)

C'est ma configuration DNS

*.domain.com. 14400 A 111.111.11.1 

Ceci est ma configuration d'hôte virtuel pour apache

<VirtualHost 111.111.11.1:80> 
    ServerName www.domain.com 
    ServerAlias *.lionite.com 
    DocumentRoot /var/www/html 
    ErrorLog /var/www/logs 
    UseCanonicalName off 

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/images 
RewriteCond %{HTTP_HOST}  !^www\.domain\.com$ 
RewriteRule ^(.+)  %{HTTP_HOST}$1   [C] 
RewriteRule ^([^.]+)\.domain\.com(.*) http://www.domain.com/something?subdomain=$1 [P,L] 

Cette configuration fonctionne bien (laissez-moi savoir si vous pensez pouvoir l'améliorer bien sûr).

Mon principal problème est quand je suis en train de configurer https: //

Ceci est ma configuration d'hôte virtuel pour apache

<VirtualHost 111.111.11.1:443> 
ServerName www.domain.com:443 
ServerAlias *.domain.com 
DocumentRoot /var/www/html 

SSLEngine on 
SSLProtocol all -SSLv2 
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW 
SSLCertificateFile /etc/httpd/conf.d/cert/server.crt 
SSLCertificateKeyFile /etc/httpd/conf.d/cert/server.key 

<Directory "/var/www/cgi-bin"> 
    SSLOptions +StdEnvVars 
</Directory> 

SetEnvIf User-Agent ".*MSIE.*" \ 
     nokeepalive ssl-unclean-shutdown \ 
     downgrade-1.0 force-response-1.0 

CustomLog logs/ssl_request_log \ 
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" 

    RewriteEngine on 
    RewriteCond %{REQUEST_URI} !^/images 
    RewriteCond %{HTTPS_HOST}  !^www\.domain\.com$ 
    RewriteRule ^(.+)  %{HTTPS_HOST}$1   [C] 
    RewriteRule ^([^.]+)\.domain\.com(.*) https://www.domain.com/something?subdomain=$1 [P,L] 

</VirtualHost> 

Chaque fois que j'appelle https://abc.domain.com - la réponse que je reçois est la page d'accueil mais peu importe ce que j'ajoute à la fin du sous-domaine, j'obtiendrai la même réponse. C'est comme si la réécriture ne répondait pas bien.

Toute aide serait appréciée, ou si vous pouvez partager comment vous la configuration proxy inverse, récrire, caractère générique et SSL subdomain tous ensemble

Merci,

+0

Cette question rentrait plus sur serverfault.com –

+0

J'ai posté cette question sur serverfault.com, n'ayant reçu aucune réponse j'ai décidé de poster ici aussi. –

Répondre

1

J'ai eu ce même problème aussi. La seule façon de le résoudre était de mettre différents domaines nécessitant une connexion sécurisée sur différents ports d'écoute parce que j'étais limité avec des adresses IP. D'après ce que je comprends, le problème est que dans le protocole https l'HÔTE n'est pas inclus dans la demande. Ainsi, lorsque la requête parvient au serveur, Apache utilise simplement la première correspondance sur l'adresse IP et le port sur lequel la connexion a été reçue car elle ne connaît pas le domaine à partir duquel elle a été demandée. La seule solution consiste à avoir une adresse IP différente pour chaque domaine ou un port différent.

Malheureusement, vous n'avez pas de chance en utilisant https avec une configuration de domaine générique, je ne crois pas qu'il y ait de toute façon pour le faire fonctionner.

+0

Essayer de faire quelque chose de similaire et trouvé cette réponse. Je crois que cela PEUT être fait. L'en-tête HOST est envoyé à chaque requête, mais lorsque cela devient un prob, ce sont les hôtes virtuels basés sur le nom. La couche SSL doit d'abord être traitée, puis Apache peut accéder à l'en-tête Host. Cela signifie que vous ne pouvez pas avoir de virtualhosts basés sur des noms avec SSL. Mais vous devriez être capable de faire ce qu'Adam veut avec les redirections, puisque la couche SSL a déjà été traitée et l'en-tête Host serait disponible pour les directives de réécriture.Je n'ai pas vu mention de HTTPS_HOST dans les docs, alors peut-être que HTTP_HOST devrait être utilisé? – kbosak

Questions connexes