Apache-Weiterleitung zu einem anderen Port

151

Ich habe seit einiger Zeit damit zu kämpfen und mache definitiv etwas falsch.

Ich habe einen Apache-Server und einen JBoss-Server auf demselben Computer. Ich möchte den Datenverkehr für mydomain.com an JBoss localhost: 8080 / example umleiten. Das DNS ist derzeit für mydomain.com eingerichtet und wird bei Eingabe in den Browser direkt an Port 80 weitergeleitet.

Meine Frage ist, wie ich zu einem anderen Port umleiten kann, wenn ein bestimmter Domainname zu Apache kommt (in diesem Fall "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> 

AKTUALISIERT mit Vorschlägen - Weiterleitung an 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> 
Agentcurry
quelle
Das sieht ziemlich gut aus. Was sind deine Symptome?
Martin Vilcans
Sympotms sind, dass ich www.mydomain.com in den Browser gestellt habe, aber es geht zum Apache-Root-Verzeichnis. Stattdessen möchte ich, dass es zu einem jboss-Unterverzeichnis localhost umleitet: 8080 / subdir. Ich arbeite derzeit daran, verschiedene Domains direkt auf Port 80 umzuleiten, kann es aber nicht ganz dazu bringen, auf einen anderen Port zu wechseln.
Agentcurry
Ich habe genau die gleiche Anfrage: Haben Sie eine Lösung gefunden?
Cystack
1
@Cystack - Ich konnte es nicht ganz zum Laufen bringen. Ich habe so viele Variationen der Konfiguration ausprobiert, dass ich verrückt geworden bin. Ich habe es aufgegeben = / Wenn Sie zufällig eine Lösung finden, posten Sie diese bitte hier. Ich würde gerne wissen, wie dies funktioniert. viel Glück mein Freund!
Agentcurry
Dies funktionierte für mich: serverfault.com/a/195831/111707
jjrv

Antworten:

224

Sie sollten die Domain http://example.comin ProxyPass und ProxyPassReverse weglassen und als belassen /. Außerdem müssen Sie das /am Ende der example/Umleitung belassen. Außerdem hatte ich einige Probleme mit http://example.comvs. http://www.example.com- nur das WWW funktionierte, bis ich den Servernamen www.example.com und den ServerAlias ​​example.com erstellte. Probieren Sie Folgendes aus.

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

Nachdem Sie diese Änderungen vorgenommen haben, fügen Sie die erforderlichen Module hinzu und starten Sie Apache neu

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart
2AMTech
quelle
9
Aktivieren Sie Apache-Module, bevor Sie Apache neu starten - digitalocean.com/community/tutorials/…
Pradyut Bhattacharya
1
Wäre dies für einen CentOS-Server dasselbe? (Ich verstehe nicht warum nicht, nur um sicher zu gehen). Und welche Konfigurationsdatei wäre das? (Irgendwo in / etc / httpd / conf, vermute ich ...)
Jeremy
1
Es hat funktioniert, aber ich habe gesehen, dass auf der Begrüßungsseite meiner Anwendung das CSS nicht geladen wurde (was früher unter example.com:8080/example funktioniert hat). und bekam auch einige Ausnahmen. Hast du eine Idee, was mir fehlt?
Rajarshee Mitra
1
Dies verursachte einen Fehler "Service nicht verfügbar" auf meinem httpd, bis ich es tat/usr/sbin/setsebool -P httpd_can_network_connect 1
vladkras
@vladkras Vielen Dank für diesen Tipp, sehr hilfreich!
Mneute
28

Ich habe dieses Problem mit dem folgenden Code gelöst:

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>

Ich habe auch verwendet:

a2enmod proxy_http
Renan Vizza
quelle
10

Ich wollte genau das tun, damit ich von der Root-Domain aus auf Jenkins zugreifen kann.

Ich musste die Standardwebsite deaktivieren, damit dies funktioniert. Genau das habe ich getan.

$ sudo vi /etc/apache2/sites-available/jenkins

Und fügen Sie dies in die Datei ein:

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

Als nächstes müssen Sie die entsprechenden Sites aktivieren / deaktivieren:

$ sudo a2ensite jenkins
$ sudo a2dissite default
$ sudo service apache2 reload

Hoffe es hilft jemandem.

Louth
quelle
Vielen Dank für Ihren Beitrag @Louth. Ich habe dies längst aufgegeben und habe den Server nicht mehr. Es stört mich immer noch, dass ich es nie zum Laufen gebracht habe. Ich kann einen neuen Server starten, nur um es erneut zu testen. Nochmals vielen Dank, ich werde auf jeden Fall aktualisieren, wenn ich es erneut versuche.
Agentcurry
Das Jenkins-Wiki erklärt, wie Jenkins hinter Apache ausgeführt wird: wiki.jenkins-ci.org/display/JENKINS/…
mneute
6

Fand dies durch Versuch und Irrtum heraus. Wenn in Ihrer Konfiguration ein Servername angegeben ist, muss Ihre VirtualHost-Direktive dasselbe tun. Im folgenden Beispiel werden awesome.example.com und Amazing.example.com an einen lokalen Dienst weitergeleitet, der auf Port 4567 ausgeführt wird.

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>

Ich weiß, dass dies die Frage nicht genau beantwortet, aber ich stelle sie hier ein, da dies das beste Suchergebnis für die Weiterleitung von Apache-Ports ist. Also denke ich, dass es eines Tages jemandem helfen wird.

Ethan B Martin
quelle
Dies ist der einzige, der für mich gearbeitet hat. Verwenden *:80statt example.com:80bedeutet, dass der Port nicht umgeleitet wird.
Seb123
4

Sie müssen sicherstellen, dass der Proxy auf dem Server aktiviert ist. Sie können dies mit den folgenden Befehlen tun:

  a2enmod proxy
  a2enmod proxy_http

  service apache2 restart
Aswin Mohanan
quelle
3

Dies mag eine alte Frage sein, aber hier ist, was ich getan habe:

In einer von Apache geladenen .conf-Datei:

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

Erläuterung: Lauschen Sie alle Anforderungen an den Port 80 des lokalen Computers ab. Wenn ich " http://something.com/somethingorother" angefordert habe , leiten Sie diese Anforderung an " http://localhost:8080/somethingorother" weiter. Dies sollte für einen externen Besucher funktionieren, da die Remote-Anforderung gemäß den Dokumenten dem Speicherplatz des lokalen Servers zugeordnet wird.

Ich verwende Apache 2.4.6-2ubuntu2.2, daher bin ich mir nicht sicher, wie sich "-2ubuntu2.2" auf die breitere Anwendbarkeit dieser Antwort auswirkt.

Nachdem Sie diese Änderungen vorgenommen haben, fügen Sie die erforderlichen Module hinzu und starten Sie Apache neu

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart
Teeeeeeeeeeeeeeeeeeeeeeeeeeeeej
quelle
2

Wenn Sie keinen Proxy für JBoss verwenden müssen und mydomain.com:8080 der Welt "ausgesetzt" sein kann, würde ich dies tun.

<VirtualHost *:80>
  ServerName mydomain.com
  Redirect 301 / http://mydomain.com:8080/
</VirtualHost>
Michael Rice
quelle
Die Verwendung eines anderen Ports als 80 sieht nicht nur hässlich aus, sondern kann auch Probleme mit Proxyservern oder ISPs verursachen. In diesem Fall entfernen Sie einfach Apache und führen Sie stattdessen JBoss auf Port 80 aus!
Martin Vilcans
Es ist eine Option, alles unter JBoss auszuführen. Ich habe nur versucht, das Verschieben der Apache-Sites nach JBoss zu vermeiden, aber es sollte nicht zu zeitaufwändig sein. Danke für die Rückmeldung.
Agentcurry
1

Mein Apache lauscht 2 verschiedenen Ports,

Listen 8080
Listen 80  

Ich verwende die 80, wenn ich eine transparente URL möchte, und setze den Port nicht nach der URL, die für Google-Dienste nützlich ist, die keine lokale URL zulassen.

Aber ich benutze den 8080 für die interne Entwicklung, wo ich den Port als Referenz für eine "Entwicklungsumgebung" benutze.

Miguel
quelle
0

Apache unterstützt namenbasierte und IP-basierte virtuelle Hosts. Es sieht so aus, als würden Sie beide verwenden, was wahrscheinlich nicht das ist, was Sie brauchen.

Ich denke, Sie versuchen tatsächlich, ein namenbasiertes virtuelles Hosting einzurichten , und dafür müssen Sie die IP-Adresse nicht angeben.

Versuchen Sie, <VirtualHost *: 80> an alle IP-Adressen zu binden, es sei denn, Sie möchten wirklich ein IP-basiertes virtuelles Hosting . Dies kann der Fall sein, wenn der Server mehrere IP-Adressen hat und Sie verschiedene Sites an verschiedenen Adressen bedienen möchten. Das häufigste Setup sind (ich würde vermuten) namenbasierte virtuelle Hosts.

Martin Vilcans
quelle
Das macht Sinn, namenbasiert ist alles was ich brauche. Ich habe es geändert, aber es wird immer noch nicht an den anderen Port weitergeleitet
agentcurry
0

Du brauchst 2 Dinge:

  1. Fügen Sie ServerAlias www.mydomain.comIhrer Konfiguration ein hinzu
  2. Ändern Sie Ihren Proxypass in ProxyPassMatch ^(.*)$ http://localhost:8080/example$1, um möglicherweise zu verhindern, dass mod_dir und nachfolgende Schrägstriche stören.
Jon Lin
quelle
Ich habe ServerAlias ​​hinzugefügt, aber immer noch kein Glück.
Agentcurry
0

Alle bieten hervorragende Einblicke in den Zugriff auf Ports über Domänennamen auf virtuellen Servern. Vergessen Sie jedoch nicht, virtuelle Server zu aktivieren. dies kann auskommentiert werden:

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

Wir führen WSGI mit einem Apache-Server in der Domäne sxxxx.com und einem Golang-Server in Port 6800 aus. Einige Firewalls scheinen Domänennamen mit Ports zu blockieren. Dies war unsere Lösung:

<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>
user2099484
quelle
0

Dies funktioniert auch in ISPConfig. Klicken Sie in der Website-Liste innerhalb einer Domain auf die Registerkarte Optionen und fügen Sie die folgenden Zeilen hinzu :;

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

Dann gehe zur Website und wolaa :) Dies funktioniert auch mit dem HTTPS-Protokoll.

Kodmanyagha
quelle
0

Probier diese-

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName www.adminbackend.example.com
  ServerAlias adminbackend.example.com
  ProxyPass / http://localhost:6000/
  ProxyPassReverse / http://localhost:6000/
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost> 
Ankit Kumar Rajpoot
quelle