web-dev-qa-db-fra.com

Comment rediriger des sous-domaines vers un port différent sur le même serveur?

J'ai des sous-domaines que je souhaite rediriger vers des ports spécifiques sur le même serveur. Dis que j'ai

dev.mydomain.com 

Je voudrais dev.mydomain.com pour rediriger en toute transparence vers mydomain.com:8080 et je souhaite conserver le nom de sous-domaine d'origine l'url du navigateur.

Comment faire cela avec Apache 2.2? J'ai Apache 2.2 exécuté sur le port par défaut 80. Je ne peux pas comprendre la configuration d'écriture pour que cela se produise.

J'ai déjà configuré dev.mydomain.com à résoudre dans DNS en mydomain.com.

C'est pour un serveur de développement intranet qui a une adresse IP non routable, donc je ne suis pas tellement préoccupé par les exploits et la sécurité qui pourraient compromettre un serveur public.

73
user35861

Solution

Voici ce que j'ai finalement trouvé après avoir été mis dans la bonne direction par Miles Erickson. Je voulais que la barre d'adresse reflète le sous-domaine/domaine d'origine de la demande et non le serveur et le port redirigés, mais il m'a mis sur la bonne voie pour Google jusqu'à une solution en utilisant VirtualHost et j'ai finalement trouvé une solution qui inclus l'utilisation de mod_proxy.

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName dev.mydomain.com
    ProxyPreserveHost On

    # setup the proxy
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass / http://localhost:8888/
    ProxyPassReverse / http://localhost:8888/
</VirtualHost>
73
user35861

En supposant que dev.mydomain.com peut être résolu sur l'IP de mydomain.com, vous pouvez ajouter ce qui suit à votre httpd.conf:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName dev.mydomain.com
    redirect / http://mydomain.com:8080/
</VirtualHost>

Documentation Apache pertinente:

  1. Guide pour créer des hôtes virtuels basés sur le nom
  2. Core , y compris VirtualHost et NameVirtualHost
  3. Rediriger

Question connexe: redirection Apache basée sur le nom d'hôte

(Remarque: la version originale de cette réponse suggérait à tort l'utilisation de RedirectMatch, qui, comme l'a souligné @ChrisS, ne peut pas analyser la partie domaine de l'URL.)

10
Skyhawk

Exécutez la ligne suivante sur le terminal (spécifiez correctement votre nom de domaine et sous-domaine)

Sudo nano /etc/Apache2/sites-available/subdomain.example.com.conf 

Collez le code suivant et modifiez-le selon vos besoins

<VirtualHost *:80>
        ServerAdmin [email protected]
        ServerName subdomain.example.com
        ServerAlias subdomain.example.com
        ProxyRequests Off

        #ProxyPass / http://localhost:8080/
        <Location />
                ProxyPreserveHost On
                ProxyPass http://example.com:8080/
                ProxyPassReverse http://example.com:8080/
        </Location>
     # Uncomment the line below if your site uses SSL.
     #SSLProxyEngine On
</VirtualHost>

Exécutez les lignes suivantes sur le terminal (spécifiez correctement votre nom de domaine et sous-domaine)

Sudo a2enmod proxy
Sudo a2enmod proxy_http
Sudo a2ensite subdomain.example.com.conf
Sudo service Apache2 restart
7
M.A.K. Ripon

Ajoutez dans votre configuration principale de vhost les lignes suivantes:

ProxyPreserveHost On
ProxyPass / http://example.com:8080/
ProxyPassReverse / http://example:8080/

Notez que cela nécessite mod_proxy sur Apache.

5
Ryszard Stawiarski

Vous recherchez mod_rewrite. Voici le lien vers la documentation d'Apache qui comprend de nombreux exemples pour les configurations de base et avancées ..

Et si vous ne parvenez pas à interpréter la documentation vous-même, essayez de l'ajouter à httpd.conf:

RewriteEngine on
RewriteCond %{HTTP_Host} ^dev\.example\.com$ [NC]        
RewriteRule ^(.*)$ http://example.com:8080$1 [R=301]    

Et si ce n'est pas un exemple clair, voici un lien vers un guide pour débutants mod_rewrite aussi.

4
Chris S