Назад | Перейти на главную страницу

Используете Apache httpd для перенаправления пути контекста?

Я бы хотел прокси http://localhost:1006/ так как http://example.com/public/ во внешний мир. Вот моя конфигурация:

RewriteEngine On
# Append a slash if necessary
RewriteRule ^/public$ public/ [R,L]

# Request headers: Replace http://localhost:1006/ with http://example.com/public/
ProxyPass /public/ http://localhost:1006/

# Response headers: Replace http://example.com/ with http://example.com/public/
ProxyPassReverse /public/ http://example.com/

ProxyPassReverseCookiePath / /public/
<Location /public>
    Require all granted
</Location>

Это хорошо работает для перезаписи заголовков, но сервер по-прежнему считает, что его контекстный путь / вместо того /public/ поэтому, когда он создает URL-адреса для встраивания в JSON, они неверны. Httpd перезаписывает только заголовки, а не JSON, поэтому ничего не делает.

Я не хочу, чтобы httpd переписывал JSON (я читал, что этот процесс ненадежен). Я заметил, что Host Заголовок, отправленный httpd на сервер, содержит внешнее имя хоста, которое позволяет серверу исправить эту часть URL-адреса. Могу ли я установить какой-нибудь другой заголовок, который укажет серверу использовать другой контекстный путь?

Смысл, Могу ли я что-нибудь сделать на httpd, что изменило бы контекстный путь сервера, не изменяя напрямую конфигурацию / код сервера?

Короткий ответ: нет, не совсем. Как правило, ваше серверное приложение должно иметь возможность настройки собственного корневого URL-адреса, чтобы оно могло генерировать соответствующие ссылки. Если ваше бэкэнд-приложение размещено в чем-то вроде Tomcat, просто установите его так, чтобы оно было доступно по тому же относительному пути (чтобы, например, вы проксировали из example.com/public/ к localhost:1006/public/).

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