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.
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>
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:
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.)
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
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.
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.