Я бы хотел прокси 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, поскольку вы будете играть с кротом с переписыванием контента в обозримом будущем, если вы переписываете дорожка.