Comment rediriger les sous-domaines sur un autre port sur le même serveur?

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

dev.mydomain.com 

Je souhaite que dev.mydomain.com redirige de manière transparente vers mydomain.com:8080 et je souhaite conserver le nom de sous-domaine original l'URL du navigateur.

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

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

Il s'agit d'un serveur de développement intranet qui possède une adresse IP non routable, de sorte que je ne suis pas tellement préoccupé par les exploits et la sécurité qui compromettraient un serveur faisant face public.

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 original de la requête et non le serveur et le port redirigé, mais il m'a mis sur le bon chemin vers Google une solution utilisant VirtualHost et j'ai finalement trouvé une solution incluant l'utilisation de mod_proxy .

 <VirtualHost *:80> ServerAdmin me@mydomain.com 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> 

En supposant que dev.mydomain.com peut être résolu à l'adresse 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 pertinente d'Apache:

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

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

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

Ajoutez dans votre configuration principale vhost les lignes suivantes:

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

Notez que cela nécessite mod_proxy sur Apache.

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

Et si vous ne pouvez pas interpréter la documentation vous-même, essayez d'ajouter ceci à 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 mod_rewrite débutant .

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

 sudo nano /etc/apache2/sites-available/subdomain.domain.com.conf 

Collez le code suivant et modifiez vos besoins

 <VirtualHost *:80> ServerAdmin admin@domain.com ServerName subdomain.domain.com ServerAlias subdomain.domain.com ProxyRequests Off #ProxyPass / http://localhost:8080/ <Location /> ProxyPreserveHost On ProxyPass http://domain.com:8080/ ProxyPassReverse http://domain.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 de sous-domaine)

 sudo a2enmod proxy sudo a2enmod proxy_http sudo a2enmod subdomain.domain.com.conf sudo service apache2 restart