Apache перенаправить на другой порт - PullRequest
133 голосов
/ 17 декабря 2011

Я боролся с этим в течение некоторого времени и определенно делаю что-то не так.

У меня есть сервер Apache и сервер JBoss на одной машине. Я хотел бы перенаправить трафик для mydomain.com на JBoss localhost: 8080 / пример. DNS в настоящее время настроен для mydomain.com, и он будет идти прямо к порту 80 при входе в браузер.

У меня вопрос, как мне перенаправить на другой порт, когда определенное доменное имя приходит в apache (в данном случае, «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> 

ОБНОВЛЕНО с предложениями - Все еще не переадресация на порт 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> 

Ответы [ 13 ]

195 голосов
/ 26 октября 2012

Вы должны оставить домен http://example.com в ProxyPass и ProxyPassReverse и оставить его как /.Кроме того, вам нужно оставить / в конце example/ туда, куда он перенаправляет.Кроме того, у меня были некоторые проблемы с http://example.com против http://www.example.com - работал только www, пока я не сделал ServerName www.example.com и ServerAlias ​​example.com.Попробуйте следующее.

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

После внесения этих изменений добавьте необходимые модули и перезапустите apache

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart
26 голосов
/ 06 ноября 2012

Я решил эту проблему с помощью следующего кода:

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>

Я также использовал:

a2enmod proxy_http
8 голосов
/ 29 июля 2013

Я хотел сделать именно это, чтобы получить доступ к Jenkins из корневого домена.

Я обнаружил, что мне пришлось отключить сайт по умолчанию, чтобы заставить это работать. Вот именно то, что я сделал.

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

И вставить это в файл:

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

Далее необходимо включить / отключить соответствующие сайты:

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

Надеюсь, это кому-нибудь поможет.

5 голосов
/ 24 февраля 2016

Обнаружено это методом проб и ошибок.Если в вашей конфигурации указано имя_сервера, то ваша директива VirtualHost должна будет сделать то же самое.В следующем примере awesome.example.com и amazing.example.com будут перенаправлены на локальный сервис, работающий через порт 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>

Я знаю, что это не совсем ответ на вопрос, ноЯ помещаю это здесь, потому что это лучший результат поиска для переадресации порта Apache.Так что я полагаю, что когда-нибудь это кому-нибудь поможет.

4 голосов
/ 11 октября 2016

Вы должны убедиться, что прокси включен на сервере.Вы можете сделать это с помощью следующих команд:

  a2enmod proxy
  a2enmod proxy_http

  service apache2 restart
3 голосов
/ 01 сентября 2014

Это может быть старый вопрос, но вот что я сделал:

В файле .conf, загруженном apache:

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

Объяснение: Прослушивать все запросы к локальной машинепорт 80. Если я запросил «http://something.com/somethingorother», перенаправьте этот запрос на «http://localhost:8080/somethingorother».Это должно работать для внешнего посетителя, потому что, согласно документам, он отображает удаленный запрос в пространство локального сервера.

Я использую Apache 2.4.6-2ubuntu2.2, поэтому я не уверенкак «-2ubuntu2.2» влияет на более широкую применимость этого ответа.

После внесения этих изменений добавьте необходимые модули и перезапустите apache

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart
2 голосов
/ 17 декабря 2011

Если вам не нужно использовать прокси для JBoss и mydomain.com:8080 может быть «выставлен» миру, то я бы сделал это.

<VirtualHost *:80>
  ServerName mydomain.com
  Redirect 301 / http://mydomain.com:8080/
</VirtualHost>
1 голос
/ 13 июня 2014

Просто используйте обратный прокси-сервер в вашей конфигурации Apache (напрямую):

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

Здесь вы найдете документацию Apache по использованию мода

0 голосов
/ 07 апреля 2017

Это работает и в ISPConfig. В список веб-сайтов попадите внутрь домена, перейдите на вкладку «Параметры» и добавьте следующие строки:;

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

Тогда зайдите на сайт и wolaa :) Это тоже работает протокол HTTPS.

0 голосов
/ 22 февраля 2017

Мой apache прослушивает 2 разных порта,

Listen 8080
Listen 80  

Я использую 80, когда хочу прозрачный URL-адрес, и не помещаю порт после URL-адреса, полезного для служб Google, которые не разрешают локальный URL-адрес?

Но я использую 8080 для внутренней разработки, где я использую порт в качестве эталона для "среды разработки"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...