86 votes

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

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

dev.mydomain.com 

Je veux dev.mydomain.com pour rediriger de manière transparente vers mydomain.com:8080 et je veux conserver le nom original du sous-domaine dans l'url du navigateur.

Comment puis-je faire cela avec Apache 2.2 ? Apache 2.2 fonctionne sur le port par défaut. 80 . Je n'arrive pas à trouver la configuration d'écriture pour que cela se produise.

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

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

86voto

Solution

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

D'abord, assurez-vous mod_proxy est activé :

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo systemctl restart apache2

Ensuite, ajoutez les éléments suivants à la configuration de votre site (par exemple, /etc/apache2/sites-available/000-default.conf ):

<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>

16voto

M.A.K. Ripon Points 251

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.example.com.conf 

Collez le code suivant et modifiez-le selon vos besoins.

<VirtualHost *:80>
        ServerAdmin admin@example.com
        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 de sous-domaine)

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2ensite subdomain.example.com.conf
sudo service apache2 restart

11voto

Skyhawk Points 14029

En supposant que dev.mydomain.com peut être résolu vers 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 la création d'hôtes virtuels basés sur le nom
  2. Core dont VirtualHost y NomVirtualHost
  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 @ChrisS l'a utilement souligné, ne peut pas analyser la partie domaine de l'URL).

5voto

Mayank Points 2018

Ajoutez les lignes suivantes dans la configuration de votre serveur virtuel principal :

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

Notez que cela nécessite mod_proxy sur Apache.

4voto

frameworkninja Points 628

Vous cherchez mod_rewrite. Voici le lien vers la documentation d'Apache qui comprend de nombreux exemples pour base y avancé des configurations..

Et si vous n'êtes pas en mesure d'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 une lien vers un guide pour débutants sur le mod_rewrite aussi.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X