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

67

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

dev.mydomain.com 

Je souhaite dev.mydomain.comrediriger de manière transparente vers mydomain.com:8080et je veux conserver le nom de sous-domaine d'origine, l'URL du navigateur.

Comment puis-je faire cela avec Apache 2.2? J'ai Apache 2.2 en cours d'exécution sur le port par défaut 80. Je n'arrive pas à comprendre la configuration d'écriture pour que cela se produise.

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

Ceci 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 compromettraient un serveur public.


la source

Réponses:

69

Solution

Voici ce que j'ai finalement trouvé après avoir été placé 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 le droit chemin d'une solution utilisant Google VirtualHostet j'ai finalement trouvé une solution incluant 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>
utilisateur3037143
la source
7
Pour tous ceux pour qui cette réponse n'a pas fonctionné, gardez à l'esprit que vous devez activer les mods mod_proxyainsi que proxy_http.
Matewka
9

En supposant que dev.mydomain.com puisse être résolu en 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 Apache pertinente:

  1. Guide de création d'hôtes virtuels nommés
  2. Noyau , y compris VirtualHost et NameVirtualHost
  3. Réorienter

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

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

Skyhawk
la source
1
voyez ma réponse fournie par moi-même pour ce que j'ai réellement utilisé, à savoir cette idée de VirtualHost avec mod_proxy pour conserver l'hôte d'origine au lieu de faire une redirection. Ceci est un serveur interne donc je ne suis pas concerné par la sécurité ou les exploits de mod_proxy.
1
J'ai trouvé de nombreuses autres suggestions, mais cela a finalement fonctionné pour moi sur Windows Server 2008 R2 / Apache 2.2.25.
HPWD
1
Le problème avec cette solution est que chez votre frère, vous ne restez pas sur le premier domaine, vous obtenez un 302 au second.
Pleymor
7

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

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

Collez le code suivant et changez 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 votre domaine et le nom du sous-domaine correctement)

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2ensite subdomain.example.com.conf
sudo service apache2 restart
MAK Ripon
la source
3
Existe-t-il une différence essentielle entre cette réponse et la réponse acceptée?
Kasperd
1
La plupart des gens oublient d’ajouter sudo a2enmod proxy_httppour faire face à des difficultés pour bien fonctionner. Aussi, j'essaie de donner le processus complet du début à la fin dans une séquence pour aider plus d'acculturation. Merci pour votre question.
MAK Ripon
1
+1 à cause de la mention "ProxyRequests Off"
Sebastian le
1
Cela ne fonctionne tout simplement pas pour moi. "sudo a2enmod subdomain.domain.com.conf" indique "ERREUR: le module xyz n'existe pas!" Doit-il être mentionné dans la configuration 'par défaut'?
Dirk Schumacher
2
Correction dans l'enregistrement du soussudo a2ensite sub.yourdomain.com
Ali Azhar
5

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.

Ryszard Stawiarski
la source
Ce n'est pas une redirection; il proxy la connexion. Activer mod_proxy peut être extrêmement facile à exploiter si vous ne le configurez pas très soigneusement. Je recommande fortement contre cela.
Chris S
4
Il ne veut pas de redirection, selon son OP. Il souhaite que l'URL d'origine reste dans la barre d'adresse. cela signifie utiliser mod_proxy ou mod_rewrite, et il vaut mieux éviter mod_rewrite.
Adaptr
4

Vous recherchez mod_rewrite. Voici le lien vers la documentation d'Apache, qui comprend de nombreux exemples de configurations de base 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 également un lien vers un guide de débutant mod_rewrite .

Chris S
la source
1
Je suis sur l'hébergement partagé. La réécriture est la seule option. Je peux créer un fichier .htaccess, mais pas un proxy ou un hôte virtuel.
Abalter