Apache перенаправить на другой порт

106

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

У меня есть сервер Apache и сервер JBoss на том же компьютере. Я хотел бы перенаправить трафик для mydomain.com на JBoss localhost: 8080/example. 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> 

ОБНОВЛЕНО w/Предложения - Все еще не пересылать порт 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> 
  • 0
    Это выглядит довольно хорошо. Какие у Вас симптомы?
  • 0
    Симптомы в том, что я помещаю www.mydomain.com в браузер, но он идет к корневому каталогу Apache. Вместо этого я бы хотел, чтобы он перенаправлял в подкаталог jboss localhost: 8080 / subdir. В настоящее время он работает для перенаправления различных доменов прямо на порт 80, но не могу заставить его перейти на другой порт.
Показать ещё 6 комментариев
Теги:
redirect

13 ответов

149
Лучший ответ

Вы должны оставить домен 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
  • 8
    включить модули apache перед перезапуском apache - digitalocean.com/community/tutorials/…
  • 1
    Будет ли это то же самое для сервера CentOS? (Я не понимаю, почему нет, просто убедившись). И какой файл конфигурации это будет? (где-то в / etc / httpd / conf я догадываюсь ...)
Показать ещё 3 комментария
23

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

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
7

Я хотел сделать именно это, чтобы получить доступ к 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

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

  • 0
    Спасибо за помощь @Louth. Я давно отказался от этого и больше не имею сервера. Меня все еще беспокоит, что у меня так и не получилось, я могу запустить новый сервер, чтобы еще раз протестировать. Еще раз спасибо, я обязательно обновлюсь, если / когда я попробую это снова.
  • 0
    Вики Дженкинса объясняют, как управлять Дженкинсом за Apache: wiki.jenkins-ci.org/display/JENKINS/…
4

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

  a2enmod proxy
  a2enmod proxy_http

  service apache2 restart
4

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

  • 0
    Это единственный, который работал на меня. Использование *:80 вместо example.com:80 означало, что порт не будет перенаправлен.
2

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

В файле.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

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

<VirtualHost *:80>
  ServerName mydomain.com
  Redirect 301 / http://mydomain.com:8080/
</VirtualHost>
  • 0
    Использование порта, отличного от 80, не только выглядит уродливо, но и может вызвать проблемы с прокси-серверами или интернет-провайдерами. В этом случае просто удалите Apache и запустите JBoss на 80-м порту!
  • 0
    Запуск всего под JBoss - вариант, я просто пытался избежать перемещения сайтов Apache на JBoss, но это не должно занимать слишком много времени. Спасибо за ответ.
1

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

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

Посмотрите здесь, как документация apache о том, как использовать мод

0

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

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

Затем перейдите на сайт и wolaa:) Это тоже протокол HTTPS.

0

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

Listen 8080
Listen 80  

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

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

0

Все это отличная информация о доступе к портам через доменные имена на виртуальных серверах. Однако не забудьте включить виртуальные серверы; это можно прокомментировать:

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

Мы запускаем WSGI с сервером Apache в домене sxxxx.com и сервером golang, работающим на порте 6800. Некоторые брандмауэры, похоже, блокируют имена доменов портами. Это было наше решение:

<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

Apache поддерживает виртуальные хосты на основе имен и IP. Похоже, вы используете оба, что, вероятно, не то, что вам нужно.

Я думаю, вы на самом деле пытаетесь настроить виртуальный хостинг на основе имен, и для этого вам не нужно указывать IP-адрес адрес.

Попробуйте < VirtualHost *: 80 > для привязки ко всем IP-адресам, если вы действительно не хотите виртуальный хостинг на базе ip. Это может иметь место, если сервер имеет несколько IP-адресов, и вы хотите обслуживать разные сайты по разным адресам. Наиболее распространенная настройка - это (я бы предположил) виртуальные хосты на основе имен.

  • 0
    Это имеет смысл, имя на основе это все, что мне нужно. Я изменил его, но он все еще не направляет на другой порт
0

Вам нужно 2 вещи:

  • Добавьте ServerAlias www.mydomain.com в конфигурацию
  • измените ваш proxypass на ProxyPassMatch ^(.*)$ http://localhost:8080/example$1, чтобы, возможно, сохранить mod_dir и завершающие косые черты от интерферирования.
  • 0
    Я добавил ServerAlias, но все равно не повезло.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню