Przekierowanie Apache na inny port

walczyłem z tym przez jakiś czas, a ja na pewno robię coś źle.

mam serwer apache i serwer JBoss na jednej maszynie. Chciałbym przekierować ruch na mydomain.com dla JBoss localhost: 8080 / przykład. DNS jest obecnie skonfigurowany do mydomain.com i będzie go bezpośrednio do portu 80 po wejściu w przeglądarkę.

moje pytanie brzmi, jak przekierować na inny port, gdy określona nazwa domeny jest w apache (w tym przypadku, "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> 

aktualizacja z ofertami - Wciąż nie przekazywanie połączeń na 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> 

musisz zaparkować domenę http://example.com w ProxyPass i ProxyPassReverse i zostaw go jako /. Ponadto, trzeba zostawić / W końcu example/ tam, gdzie przekierowuje. Poza tym, miałem pewne problemy z http://example.com a http://www.example.com - tylko www pracował, dopóki nie zrobił Nazwa_serwera www.example.com i Сервералии example.com - Daj następną próbę.

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

po dokonaniu tych zmian należy dodać odpowiednie moduły i uruchom ponownie Apacze!--9-->

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart

postanowiłem ten problem z następującym kodem:

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>

Ja też:

a2enmod proxy_http

chciałem zrobić dokładnie to, żebym mógł uzyskać dostęp do Jenkins z domeny głównej.

odkryłem, że musiałem wyłączyć stronę domyślną, aby sprawić to działać. To, co zrobiłem.

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

i wklej to do pliku:

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

Następnie należy włączyć / wyłączyć stronach internetowych:

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

mam nadzieję, że to komuś pomoże.


znalazłem to metodą prób i błędów. Jeżeli w konfiguracji zaznaczono nazwę serwera, dyrektywa VirtualHost będzie musiała zrobić to samo. W poniższym przykładzie awesome.example.com i amazing.example.com oba będą przekierowany na jakąś lokalną usługę, działający na porcie 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>

wiem, że to nie do końca odpowiada na pytanie, ale ja umieszczam go tutaj, bo to najlepszy wynik wyszukiwania dla przekierowania portów Apache. Myślę, że to komuś pomoże. kiedyś.


musisz upewnić się, że serwer proxy włączony na serwerze. Można to zrobić za pomocą następujących poleceń:

  a2enmod proxy
  a2enmod proxy_http

  service apache2 restart

Jeśli nie musisz korzystać z serwera proxy dla JBoss i mydomain.com: 8080 można "wystawić" świecie, to ja bym to zrobił.

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

to może być stare pytanie, ale oto co zrobiłem:

a .conf plik pobrany apache:

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

wyjaśnienie: słuchajcie wszystkie żądania do portu 80 lokalnej maszyny. Jeśli poproszę ... --2-->" prześlij żądanie "http://localhost:8080/somethingorother". To powinno działać dla użytkownika zewnętrznego, ponieważ, według dokumentów, to koreluje zdalne zapytania z miejsca lokalnego serwera.

uruchamiam Apache 2.4.6-2ubuntu2.2, więc nie jestem pewien, jak " - 2ubuntu2.2" wpływa na szersze stosowanie tej odpowiedzi.

po dokonaniu tych zmian należy dodać odpowiednie moduły i zrestartuj apache

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart

po prostu użyj reverse proxy w konfiguracji apache (bezpośrednio):

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

zobacz tutaj dokumentację apache o tym, jak używać mod


Apache obsługuje wirtualne hosty na podstawie nazw i adresów IP. Wygląda na to, używasz zarówno, że, prawdopodobnie, nie to, co trzeba.

myślę, że faktycznie starasz się ustawić wirtualny hosting na podstawie nazw i do tego nie trzeba podawać adres IP.

spróbuj przyciągaj do wszystkich adresów IP, jeśli naprawdę nie chceszwirtualny hosting na podstawie ip. To może być w przypadku, gdy serwer ma kilka adresów IP i chcesz obsługiwać różne strony internetowe w różnych miejscach. Najczęstszą konfiguracją (przypuszczam) są wirtualne hosty na podstawie nazw.


trzeba 2 rzeczy:

  1. dodaj ServerAlias www.mydomain.com w swój config
  2. zmień swój proxypass na ProxyPassMatch ^(.*)$ http://localhost:8080/example, aby, być może, zapisz mod_dir i końcowe ukośniki od interwencji.

wszystkie świetne pomysły, aby uzyskać dostęp do portów na nazwy domen na wirtualnych serwerach. Nie zapomnij jednak, włączyć serwery wirtualne; to może być прокомментировано:

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

uruchamiamy WSGI z serwerem Apache w domenie sxxxx.com i serwer golang, działający na porcie 6800. Niektóre zapory, wygląda na to, blokowanie domen z portami. To było nasze rozwiązanie:

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

mój apache nasłuchuje 2 różnych portu,

Listen 8080
Listen 80  

ja używam 80, kiedy potrzebuję przezroczysty adres URL i nie umieszczać port po URL przydatne dla usług google, które nie pozwalają na lokalny adres url?

ale używam 8080 dla wewnętrznego rozwoju, gdzie używam port jako odniesienie do "naturalnego rozwoju"


to działa i do serwera ispconfig. W liście witryn sieci web zaloguj się do domeny, kliknij kartę Opcje, dodaj następujące wiersze:;

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

następnie przejdź do witryny sieci web i wolaa :) to też działa protokół HTTPS.