Переадресація Apache на інший порт


151

Я боровся з цим деякий час і напевно роблю щось не так.

У мене є сервер 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> 

ОНОВЛЕНО з пропозиціями - все-таки не пересилається до порту 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> 

Це виглядає досить добре. Які у вас симптоми?
Мартін Вілканс

Симптомами є те, що я розміщую www.mydomain.com у веб-переглядачі, але він переходить до апач-кореня dir. Натомість я хотів би перенаправити його на підкаталог jboss localhost: 8080 / subdir. В даний час я працюю над перенаправленням різних доменів прямо до порту 80, але я не можу повністю перейти на інший порт.
агентські курси

У мене точно такий же запит: ти знайшов рішення?
Cystack

1
@Cystack - Я не міг цілком змусити його працювати. Я спробував так багато варіацій конфігурації, що мене зводило з розуму. Я відмовився від цього = / Якщо ви знайдете рішення, будь ласка, опублікуйте його тут, я хотів би знати, як змусити це працювати. удачі мій друже!
agentcurry

Це працювало для мене: serverfault.com/a/195831/111707
jjrv

Відповіді:


224

Ви повинні залишити домен http://example.comу ProxyPass та ProxyPassReverse і залишити його як /. Крім того, вам потрібно залишити /в кінці example/туди, куди він перенаправляється. Крім того, у мене виникли деякі проблеми http://example.comпроти http://www.example.com- лише веб-сайт працював, поки я не створив серверне ім'я www.example.com та сервер exampleAlaasas.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

9
увімкніть модулі apache перед перезапуском apache - digitalocean.com/community/tutorials/…
Pradyut Bhattacharya

1
Це буде те саме для сервера CentOS? (Я не бачу, чому ні, просто переконуюсь). І що це за конфігураційний файл? (десь у / etc / httpd / conf я здогадуюсь ...)
Джеремі

1
Це спрацювало, але я побачив, що на вітальній сторінці моєї програми css не завантажується (що раніше працювало на example.com:8080/example). а також отримали деякі винятки. будь-яка ідея, чого мені не вистачає?
Раджарші Мітра

1
це спричинило помилку "Служба недоступна" на моєму httpd, поки я цього не зробив/usr/sbin/setsebool -P httpd_can_network_connect 1
vladkras

@vladkras Дякую за цю пораду, дуже корисно!
mneute

28

Я вирішив цю проблему за допомогою наступного коду:

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

10

Я хотів зробити саме це, щоб я міг отримати доступ до Дженкінса з кореневого домену.

Я виявив, що мені потрібно вимкнути сайт за замовчуванням, щоб змусити це працювати. Ось саме це я і зробив.

$ 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

Сподіваюся, це комусь допоможе.


Дякуємо, що дописували @Louth. Я давно відмовився від цього і більше не маю сервера. Все ще турбує мене те, що я ніколи не працював, я можу запустити новий сервер, щоб знову перевірити. Ще раз дякую, я обов'язково оновлю, якщо / коли я спробую це ще раз.
agentcurry

Вікі Дженкінса пояснює, як запустити Дженкінса за Apache: wiki.jenkins-ci.org/display/JENKINS/…
mneute

6

З'ясували це шляхом спроб та помилок. Якщо у вашій конфігурації вказано ім’я ServerName, тоді вам потрібно буде виконати і вашу директиву 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. Тож я думаю, що колись це допоможе комусь.


Це єдиний, хто працював на мене. Використання *:80замість цього example.com:80означало, що порт не буде перенаправлений.
Seb123

4

Ви повинні переконатися, що проксі-сервер увімкнено на сервері. Це можна зробити за допомогою наступних команд:

  a2enmod proxy
  a2enmod proxy_http

  service apache2 restart

3

Це може бути старе питання, але ось що я зробив:

У файлі .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>

Використання порту, відмінного від 80, не тільки виглядає некрасиво, але також може спричинити проблеми з проксі-серверами або провайдерами. У такому випадку просто видаліть Apache і замість цього запустіть JBoss на порт 80!
Мартін Вілканс

Запуск всього під JBoss - це варіант, я просто намагався уникати переміщення сайтів apache до JBoss, але це не повинно зайвим часом. Дякуємо за відгук.
агент, що проходить


1

Мій apache прослуховує два різні порти,

Listen 8080
Listen 80  

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

Але я використовую 8080 для внутрішньої розробки, де я використовую порт як орієнтир для "середовища розробки"


0

Apache підтримує віртуальні хости на основі імен та IP. Схоже, ви використовуєте обидва, що, мабуть, не те, що вам потрібно.

Я думаю, ви насправді намагаєтеся налаштувати віртуальний хостинг на основі імен , і для цього вам не потрібно вказувати IP-адресу.

Спробуйте <VirtualHost *: 80> прив’язатись до всіх IP-адрес, якщо ви дійсно не хочете віртуального хостингу на основі ip . Це може бути, якщо сервер має кілька IP-адрес, і ви хочете обслуговувати різні сайти за різними адресами. Найпоширеніша установка - це (я б здогадався) віртуальні хости на основі імен.


Це має сенс, все, що мені потрібно, засноване на імені. Я змінив його, але він все ще не буде маршрутизуватися на інший порт
agentcurry

0

Вам потрібно 2 речі:

  1. Додайте ServerAlias www.mydomain.comдо своєї конфігурації
  2. змінити проксіпас на ProxyPassMatch ^(.*)$ http://localhost:8080/example$1, щоб, можливо, не допускати перешкод mod_dir та слішів.

Я додав ServerAlias, але все одно не пощастило.
агентство проходить

0

Усі є чудовою інформацією про доступ до портів через доменні імена на віртуальних серверах. Однак не забувайте ввімкнути віртуальні сервери; це може бути прокоментовано:

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

Ми запускаємо WSGI з сервером Apache в домені sxxxx.com і голанг-сервером, що працює на порту 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

Це працює і в ISPConfig. У списку веб-сайтів потрапляйте до домену, перейдіть на вкладку Параметри, додайте ці рядки:;

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

Потім перейдіть на веб-сайт і wolaa :) Це теж працює протокол HTTPS.


0

Спробуйте це-

<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> 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.