it-swarm.com.de

Apache-Weiterleitung an einen anderen Port

Ich habe einige Zeit damit zu kämpfen gehabt und mache definitiv etwas falsch. 

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

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 - Wird immer noch nicht an Port 8080 weitergeleitet

<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

Sie sollten die Domäne http://example.com in ProxyPass und ProxyPassReverse weglassen und sie als / belassen. Außerdem müssen Sie den / am Ende von example/ dort lassen, wo er umgeleitet wird. Ich hatte auch Probleme mit http://example.com vs. http://www.example.com - nur das www funktionierte, bis ich den Servernamen www.example.com und den ServerAlias ​​example.com erstellte. Geben Sie die folgenden Schritte ein.

<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
177
2AMTech

Ich habe dieses Problem mit folgendem 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 benutzt:

a2enmod proxy_http
24
Renan Vizza

Ich wollte genau das tun, um von der Root-Domäne aus auf Jenkins zugreifen zu können. 

Ich stellte fest, dass ich die Standard-Site deaktivieren musste, damit dies funktioniert. Genau das habe ich getan.

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

Und füge das 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.

8
Louth

Fand das durch Versuch und Irrtum heraus. Wenn Ihre Konfiguration einen Servernamen angibt, muss Ihre VirtualHost-Direktive dasselbe tun. Im folgenden Beispiel werden sowohl awesome.example.com als auch 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ß, das beantwortet die Frage nicht genau, aber ich stelle sie hier, weil dies das beste Suchergebnis für die Apache-Portweiterleitung ist. Ich denke, es wird irgendwann jemandem helfen.

4
Ethan B Martin

Sie müssen sicherstellen, dass der Proxy auf dem Server aktiviert ist. Verwenden Sie dazu die folgenden Befehle:

  a2enmod proxy
  a2enmod proxy_http

  service Apache2 restart
4
Aswin Mohanan

Dies könnte eine alte Frage sein, aber ich habe folgendes getan:

In einer von Apache geladenen .conf-Datei:

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

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

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

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

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>
2
Michael Rice

Verwenden Sie einfach einen Reverse Proxy in Ihrer Apache-Konfiguration (direkt):

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

Hier geht es zur Apache-Dokumentation zur Verwendung des Mods

1
Julian Dehne

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, name-based Virtual Hosting einzurichten, und dafür brauchen Sie keine IP-Adresse anzugeben.

Versuchen Sie, <VirtualHost *: 80> an alle IP-Adressen zu binden, es sei denn, Sie möchten wirklich ip-basiertes virtuelles Hosting . Dies kann der Fall sein, wenn der Server über mehrere IP-Adressen verfügt und Sie verschiedene Standorte an unterschiedlichen Adressen bereitstellen möchten. Das am häufigsten verwendete Setup ist (ich würde vermuten) auf Namen basierende virtuelle Hosts.

0
Martin Vilcans

Dies funktioniert auch in ISPConfig. Klicken Sie in der Website-Liste in eine Domäne, klicken Sie auf die Registerkarte Optionen und fügen Sie folgende Zeilen hinzu:;

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

Dann gehen Sie zur Website und wolaa :) Dies funktioniert auch im HTTPS-Protokoll.

0
kodmanyagha

Du brauchst 2 Dinge:

  1. Fügen Sie Ihrer Konfiguration einen ServerAlias www.mydomain.com hinzu
  2. Ändern Sie Ihren Proxypass in ProxyPassMatch ^(.*)$ http://localhost:8080/example$1, um zu verhindern, dass mod_dir und nachfolgende Schrägstriche gestört werden.
0
Jon Lin

Alle bieten hervorragende Einblicke in den Zugriff ü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 auf der Domäne sxxxx.com und einem Golang-Server auf Port 6800 aus. Einige Firewalls scheinen Domänennamen mit Ports zu blockieren. Das 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>
0
user2099484

Mein Apache hört auf zwei verschiedene Ports, 

Listen 8080
Listen 80  

Ich verwende die 80, wenn ich eine transparente URL haben möchte, und stelle den Port nicht hinter der URL ein Nützlich für Google-Dienste, die keine lokale URL zulassen? 

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

0
Miguel