Я видел Как правильно обрабатывать относительные URL-адреса с помощью обратного прокси-сервера - однако у меня большие проблемы с пониманием этого (и применением к моей проблеме), надеюсь, кто-то может помочь.
Допустим, у меня на сервере Ubuntu 20.04 в качестве серверной ОС, пример.com
.
Затем я устанавливаю https://github.com/hartwork/jawanndenn на сервере и запустите его — это приложение по умолчанию работает на порту 8080; и я могу подтвердить, что он работает на самом сервере, запустив:
wget -O- http://127.0.0.1:8080
Все идет нормально. Теперь то, что я хотел бы, это то, что: вместо доступа https://example.com:8080
чтобы получить доступ к этому приложению, я хотел бы получить доступ https://example.com/jaw
- куда я обычно звоню /челюсть
«подкаталог», но, возможно, точнее относительный URL-адрес. Другими словами, если я правильно понимаю терминологию, https://example.com/jaw
перевернул бы прокси на https://example.com:8080
.
Итак, я попытался сделать это в рамках <VirtualHost *:443>
определение в моем .conf
файл:
<Место/челюсть>
Параметры - Мультипросмотры - Индексы
RewriteEngine включен
Прокси-пасс http://127.0.0.1:8080
ПроксиПассРеверс http://127.0.0.1:8080
SetOutputFilter прокси-html
ПроксиHTMLURLMap http://127.0.0.1:8080
</местоположение>
Правило перезаписи ^/jaw$ /jaw/ [R]
Это работает - в том смысле, что стартовая страница приложения загружается; но целая куча ресурсов (.css, .js) не загружается; открывая консоль в своем браузере, я вижу кучу запросов 404 для:
https://example.com/static/3rdparty/jquery-3.5.1/jquery-3.5.1.min.js
https://example.com/static/3rdparty/roboto-20/css/roboto.css
...
Итак, я предполагаю, что есть некоторые файлы .js или подобные, которые просто хотят загрузить /статический/...
-> и при вызове с адреса «порта» они будут отображаться на http://127.0.0.1:8080/статический/...
и все было бы хорошо; но теперь, поскольку мы проксированы:
- запросы браузера
https://example.com/jaw
- Apache получает это, пересылает
https://example.com:8080
, где приложение слушает
- Приложение отправляет обратно файлы (.js), которые имеют ссылки в виде
/статический/...
- Как только они возвращаются в браузер, они интерпретируются как
https://example.com/static/...
- перед использованием в качестве запросов к серверу, который потом не может их найти
Я также пытался избавиться от всего <Location>
фрагмент выше, и просто используя это в <VirtualHost *:443>
узел:
Прокси-пасс /jaw/ http://127.0.0.1:6789/
ПроксиПассРеверс /jaw/ http://127.0.0.1:6789/
Происходит то же самое, что и раньше - загружается первая страница, все остальные ресурсы явно ссылаются на нее. /статический/...
и все они 404.
Наконец, я также избавился от приведенных выше утверждений и использовал это:
Прокси-пасс /jaw/ http://127.0.0.1:8080
ПроксиHTMLURLMap http://127.0.0.1:8080/jaw
<Местоположение /челюсть/>
ПроксиПассРеверс /
ПроксиПассРеверс http://127.0.0.1:8080
ProxyHTMLEnable Вкл.
ПроксиHTMLURLMap //jaw/
</местоположение>
Это имеет точно такое же поведение — первая страница загружается, ресурсы терпят неудачу — за исключением того, что ресурсы теперь перечислены в консоли браузера как:
https://example.com/jaw/static/3rdparty/jquery-3.5.1/jquery-3.5.1.min.js
https://example.com/jaw/static/3rdparty/roboto-20/css/roboto.css
...
... и они терпят неудачу с ошибкой 502 Proxy. Так что некоторые переделки произошли, но что-то все равно не так.
Итак, мой вопрос - как я могу сказать Apache, прокси все из приложения на 127.0.0.1:8080 во что-то, что отображается как «подкаталог» (относительный URL-адрес? здесь /челюсть
)?
Редактировать: оказывается, ошибка прокси-сервера 502 произошла из-за:
AH00898: ошибка поиска DNS для: 127.0.0.1:6789static, возвращенная /poll/static/js/html.js
... так что явно отсутствует косая черта; так получилось что это:
Прокси-пасс /jaw/ http://127.0.0.1:8080/
ПроксиHTMLURLMap http://127.0.0.1:8080/ /jaw/
<Местоположение /челюсть/>
ПроксиПассРеверс /
ПроксиПассРеверс http://127.0.0.1:8080/
ProxyHTMLEnable Вкл.
ПроксиHTMLURLMap //jaw/
</местоположение>
... на самом деле работает - по большей части ( / статический
Ресурсы); но потом раздается звонок /данные
это не обрабатывается этим ... Так что это все еще открытый вопрос (для меня), как проксировать "все"