web-dev-qa-db-fra.com

Apache redirige vers un autre port

Cela fait quelque temps que je lutte avec cela et je fais vraiment quelque chose de mal. 

J'ai un serveur Apache et un serveur JBoss sur le même ordinateur. Je voudrais rediriger le trafic de mydomain.com vers JBoss localhost: 8080/example. Le DNS est actuellement configuré pour mydomain.com et ira directement au port 80 une fois entré dans le navigateur. 

Ma question est la suivante: comment puis-je rediriger vers un autre port lorsqu'un certain nom de domaine vient à Apache (dans ce cas, "mydomain.com")?

<VirtualHost ip.addr.is.here> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ProxyPass http://mydomain.com http://localhost:8080/example
  ProxyPassReverse http://mydomain.com http://localhost:8080/example
</VirtualHost> 

MISE À JOUR w/Suggestions - Toujours pas transférer au port 8080

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ServerAlias www.mydomain.com
  ProxyPass http://mydomain.com http://localhost:8080/example
  ProxyPassReverse http://mydomain.com http://localhost:8080/example
</VirtualHost> 
123
agentcurry

Vous devez laisser le domaine http://example.com dans ProxyPass et ProxyPassReverse et le laisser comme /. De plus, vous devez laisser le / à la fin du example/ à l'endroit où il est redirigé. De plus, j'ai eu quelques problèmes avec http://example.com contre http://www.example.com - seul le site www fonctionnait jusqu'à ce que je crée ServerName www.example.com et ServerAlias ​​example.com. Donnez ce qui suit un essai.

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName www.example.com
  ServerAlias example.com
  ProxyPass / http://localhost:8080/example/
  ProxyPassReverse / http://localhost:8080/example/
</VirtualHost> 

Après avoir apporté ces modifications, ajoutez les modules nécessaires et redémarrez Apache.

Sudo a2enmod proxy && Sudo a2enmod proxy_http && Sudo service Apache2 restart
177
2AMTech

J'ai résolu ce problème avec le code suivant:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName myhost.com
ServerAlias ww.myhost.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>

J'ai aussi utilisé:

a2enmod proxy_http
24
Renan Vizza

Je voulais faire exactement cela pour pouvoir accéder à Jenkins à partir du domaine racine. 

J'ai trouvé que je devais désactiver le site par défaut pour que cela fonctionne. Voici exactement ce que j'ai fait.

$ Sudo vi /etc/Apache2/sites-available/jenkins

Et insérez ceci dans le fichier:

<VirtualHost *:80>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ServerAlias mydomain
  ProxyPass / http://localhost:8080/
  ProxyPassReverse / http://localhost:8080/
  <Proxy *>
        Order deny,allow
        Allow from all
  </Proxy>
</VirtualHost>

Ensuite, vous devez activer/désactiver les sites appropriés:

$ Sudo a2ensite jenkins
$ Sudo a2dissite default
$ Sudo service Apache2 reload

J'espère que ça aide quelqu'un.

8
Louth

J'ai découvert cela par essais et erreurs. Si votre configuration spécifie un nom de serveur, votre directive VirtualHost devra faire de même. Dans l'exemple suivant, awesome.example.com et amazing.example.com seraient tous deux transférés vers un service local exécuté sur le port 4567.

ServerName example.com:80

<VirtualHost example.com:80>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName awesome.example.com
  ServerAlias amazing.example.com
  ProxyPass / http://localhost:4567/
  ProxyPassReverse / http://localhost:4567/
</VirtualHost>

Je sais que cela ne répond pas exactement à la question, mais je le pose ici car il s'agit du premier résultat de recherche pour la redirection de port Apache. Je pense donc que cela aidera quelqu'un un jour.

4
Ethan B Martin

Vous devez vous assurer que le proxy est activé sur le serveur. Vous pouvez le faire en utilisant les commandes suivantes:

  a2enmod proxy
  a2enmod proxy_http

  service Apache2 restart
4
Aswin Mohanan

C'est peut-être une vieille question, mais voici ce que j'ai fait:

Dans un fichier .conf chargé par Apache:

<VirtualHost *:80>
  ServerName something.com
  ProxyPass / http://localhost:8080/
</VirtualHost>

Explication: Écoutez toutes les demandes adressées au port 80 de la machine locale. Si j'ai demandé "http://something.com/somethingorother", transmettez cette demande à "http://localhost:8080/somethingorother". Cela devrait fonctionner pour un visiteur externe car, selon la documentation, il mapperait la demande distante sur l'espace du serveur local.

J'utilise Apache 2.4.6-2ubuntu2.2, donc je ne suis pas sûr de savoir comment "-2ubuntu2.2" affecte l'applicabilité plus large de cette réponse.

Après avoir apporté ces modifications, ajoutez les modules nécessaires et redémarrez Apache.

Sudo a2enmod proxy && Sudo a2enmod proxy_http && Sudo service Apache2 restart

Si vous n'avez pas à utiliser un proxy pour JBoss et que mydomain.com:8080 peut être "exposé" au monde entier, je le ferais.

<VirtualHost *:80>
  ServerName mydomain.com
  Redirect 301 / http://mydomain.com:8080/
</VirtualHost>
2
Michael Rice

Utilisez simplement un proxy inverse dans votre configuration Apache (directement):

ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar

Recherchez ici la documentation Apache sur l'utilisation du mod

1
Julian Dehne

Apache prend en charge les hôtes virtuels nommés et IP. On dirait que vous utilisez les deux, ce qui n'est probablement pas ce dont vous avez besoin.

Je pense que vous essayez réellement de configurer un hébergement virtuel basé sur nom , et pour cela vous n'avez pas besoin de spécifier l'adresse IP.

Essayez de connecter <VirtualHost *: 80> à toutes les adresses IP, à moins que vous ne souhaitiez vraiment un hébergement virtuel basé sur ip . Cela peut être le cas si le serveur a plusieurs adresses IP et que vous souhaitez desservir différents sites sur différentes adresses. La configuration la plus courante est (j'imagine) des hôtes virtuels nommés.

0
Martin Vilcans

Cela fonctionne aussi dans ISPConfig. Dans la liste des sites Web à l’intérieur d’un domaine, cliquez sur l’onglet Options, ajoutez les lignes suivantes:;

ProxyPass / http://localhost:8181/
ProxyPassReverse / http://localhost:8181/

Ensuite, visitez le site Web et wolaa :) Ceci fonctionne également avec le protocole HTTPS.

0
kodmanyagha

Vous avez besoin de 2 choses:

  1. Ajouter un ServerAlias www.mydomain.com à votre configuration
  2. changez votre proxypass en ProxyPassMatch ^(.*)$ http://localhost:8080/example$1, pour empêcher éventuellement mod_dir et les slash de fin d’interférer.
0
Jon Lin

Toutes sont d'excellentes informations pour accéder aux ports via des noms de domaine sur des serveurs virtuels. N'oubliez pas toutefois d'activer les serveurs virtuels; cela peut être commenté:

NameVirtualHost *:80
<Directory "/home/dawba/www/">
 allow from all
</Directory>

Nous exécutons WSGI avec un serveur Apache sur le domaine sxxxx.com et un serveur golang s'exécutant sur le port 6800. Certains pare-feu semblent bloquer les noms de domaine dotés de ports. C'était notre solution:

<VirtualHost *:80>
 ProxyPreserveHost On
 ProxyRequests Off
 ServerName wsgi.sxxxx.com
 DocumentRoot "/home/dxxxx/www"
  <Directory "/home/dxxx/www">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
 ScriptAlias /py/ "/home/dxxxx/www/py/"
 WSGIScriptAlias /wsgiprog /home/dxxxx/www/wsgiprog/Form/Start.wsgi
</VirtualHost>

<VirtualHost *:80>
 ProxyPreserveHost On
 ProxyRequests Off
 ServerName sxxxx.com 
 ServerAlias www.sxxxx.com
 ProxyPass / http://localhost:6800/
 ProxyPassReverse / http://localhost:6800/
</VirtualHost>
0
user2099484

Mon Apache écoute 2 ports différents, 

Listen 8080
Listen 80  

J'utilise le 80 quand je veux une URL transparente et ne mets pas le port après l'URL Utile pour les services Google qui ne permettent pas d'URL locale? 

Mais j'utilise le 8080 pour le développement interne, où j'utilise le port comme référence pour un "environnement de développement"

0
Miguel