ProxyPass: перенаправить URL каталога на нестандартный порт

13

Я искал Google и не имел большого успеха в поиске ответа. Я использую сервер в Ubuntu, и у меня установлены программы, использующие различные нестандартные порты. Каждый из них использует свой порт, в моем случае это 9090, 9091, 9092, 9093 и 9094. Я настроил сервер Apache и имею доменное имя, которое теперь может достигать моего сервера вместо того, чтобы вводить мой IP-адрес. То, что я ищу, - это способ создания каталогов, которые могут указывать на разные порты, которые я перечислил. Я хочу что-то вроде:

https://www.mydomain.com/app1
https://www.mydomain.com/app2
http://www.mydomain.com/app3

Некоторые порты по SSL, некоторые нет, я просто привел их в порядок (9090-9094) для удобства использования с моей стороны. Я бы хотел, чтобы / app1 указывал на SSL-порт 9090, / app2 указывал на SSL-порт 9091 и / app3 указывал на не-SSL-порт 9092. Есть ли простой способ сделать это? Я пытался добавить ProxyPass и тому подобное на основе других сообщений, но ничего не помогло. Нужно ли добавлять новый сайт?

Кроме того, если это связано с редактированием файлов, что, как я ожидаю, произойдет, было бы очень полезно, если бы вы могли указать местоположение файла по умолчанию и куда добавлять вещи. Я продолжал видеть сообщения, в которых говорилось о добавлении ProxyPass, поэтому я предположил, что это происходит внутри VirtualHost, но я не был полностью уверен. По сути, я очень мало знаю о настройке веб-сервера, и мне нужно относиться к нему как к такому.

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

РЕДАКТИРОВАТЬ: Для пояснения, приложения уже доступны через https://www.mydomain.com:9090и т. Д. Я просто хотел бы использовать способ, https://www.mydomain.com/appNameчтобы добраться до того же места / страницы, опубликованной этими приложениями.

РЕДАКТИРОВАТЬ 2: Из / etc / apache2 / sites-available / default

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass /app1 https://localhost:9090/
    ProxyPassReverse /app1 https://localhost:9090/
</VirtualHost>
Serneum
источник
Можете ли вы опубликовать вывод директив конфигурации, которые вы использовали для настройки? Если они внутри vhost, можете ли вы опубликовать весь vhost?
Маркос Веласкес
Что настроить? Порты? Все порты настроены через пользовательский интерфейс соответствующих программ, и я ищу способ избежать ввода портов при доступе к каждому приложению на моем сервере. Я могу копаться в приложениях, чтобы увидеть, что я могу найти, но порты обычно просто хранятся в файле config.ini
Serneum
Нет не это. Я имел в виду, что, если вы используете ProxyPass и другие вещи, вы, должно быть, разместили их внутри виртуального хостинга, верно? Если да, можете ли вы публиковать весь контент vhost, если это возможно? то есть <VirtualHost 10.0.0.1:80 > ServerName server.domain.com DocumentRoot /usr/local/apache/htdocs </VirtualHost>
Маркос Веласкес
Я отменил большинство своих изменений, чтобы получить чистую доску перед тем, как обратиться за помощью. Я просто добавил файл / etc / apache2 / sites-available / default, который у меня есть, и в конце добавил материал Proxy, основываясь на том, что я видел на других сайтах / поисках
Serneum

Ответы:

13

Убедитесь, что установлены и загружены следующие модули apache:

mod_proxy
mod_proxy_http
mod_ssl

Вы можете проверить, выполнив следующую команду от имени пользователя root (при условии, что httpd находится в вашем $ PATH)

httpd -t -D DUMP_MODULES

После этого попробуйте изменить вашу конфигурацию следующим образом:

ProxyRequests Off
<Proxy *>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Proxy>
SSLProxyEngine on
ProxyPass /app1 https://localhost:9090
ProxyPassReverse /app1 https://localhost:9090

Прокси теперь должен работать, если вы посещаете http://localhost/app1или http://mydomain.com/app1предполагаете, что mydomain.com указывает на localhost.

Маркос Веласкес
источник
Та же проблема, что и раньше, я понятия не имею, как установить mod_proxy, и a2enmod mod_proxy говорит, что mod_proxy не существует. Я буду продолжать искать, как получить эти 3 мода, чтобы я мог заставить вещи работать. При этом у меня есть прокси, proxy_http и ssl, работающие прямо сейчас. Если это то, что мне нужно, то это решение все еще не работает. Я получаю Запрещенное сообщение, которое, как я полагаю, может быть связано с «Разрешить с 127.0.0.1», но я не совсем уверен
Serneum
Примечание: mydomain.com указывает на мой внешний IP, а не на localhost. Я попытался изменить localhost: 9090 на свой ip: 9090, но безуспешно. Является ли «Разрешить от» и « локального хоста » рядом с ProxyPass по отношению к серверу или относительно того , что пытается получить к нему доступ?
Сернеум
Получил работу, сделав Allow from all временно. Недостатком является то, что на странице не отображается css и т. Д., Но это отдельная проблема, которую я рассмотрю самостоятельно. Благодарю.
Сернеум
В какой файл конфигурации мне нужно добавить ProxyRequests Off <Proxy *> Order deny,allow Deny from all Allow from 127.0.0.1 </Proxy> SSLProxyEngine on ProxyPass /app1 https://localhost:9090 ProxyPassReverse /app1 https://localhost:9090?
килтек
Не показанные ресурсы страницы могут не быть отдельной проблемой. Директива ProxyPass здесь применяется только к документу (app1). В каталог Proxy app1 со всем его содержимым добавьте косые черты. ProxyPass /app1/ https://localhost:9090/и то же самое для ProxyPassReverse, если используется. А во-вторых, добавьте редирект RewriteRule: тогда RewriteRule ^/app1$ /app1/ [R]/ app1 не будет проксироваться.
Папа