Apache - обратный прокси и сообщение о состоянии HTTP 302 - PullRequest
11 голосов
/ 10 октября 2008

Моя команда пытается настроить обратный прокси-сервер Apache с сайта клиента в одно из наших веб-приложений.

http://www.example.com/app1/some-path отображается на http://internal1.example.com/some-path

Внутри нашего приложения мы используем Struts и устанавливаем redirect = true для определенных действий, чтобы обеспечить определенную функциональность. 302 сообщения о состоянии от этих перенаправлений приводят к тому, что пользователь отключается от прокси, что приводит к появлению страницы ошибки для конечного пользователя.

HTTP / 1.1 302 Найдено Расположение: http://internal.example.com/some-path/redirect

Есть ли способ настроить обратный прокси в apache, чтобы перенаправления работали правильно?

http://www.example.com/app1/some-path/redirect

Ответы [ 4 ]

12 голосов
/ 10 октября 2008

Существует статья под названием Запуск обратного прокси в Apache , которая, кажется, решает вашу проблему. Он даже использует тот же example.com и / app1, что и в вашем примере. Перейдите в раздел «Настройка прокси», чтобы узнать, как использовать ProxyPassReverse .

.
3 голосов
/ 23 октября 2009

Статья AskApache весьма полезна, но на практике я обнаружил, что сочетание правил перезаписи и ProxyPassReverse является более гибким. Так что в вашем случае я бы сделал что-то вроде этого:

    <VirtualHost example>
       ServerName www.example.com

       ProxyPassReverse /app1/some-path/ http://internal1.example.com/some-path/
       RewriteEngine On
       RewriteRule /app1/(.*)   http://internal1.example.com/some-path$1 [P]

       ...
    </VirtualHost>

Мне это нравится больше, потому что это дает вам более точный контроль над путями, которые вы используете для внутреннего сервера. В нашем случае мы хотели выставить только часть стороннего приложения. Обратите внимание, что это не относится к жестко закодированным ссылкам в HTML, которые рассматриваются в статье AskApache.

Также обратите внимание, что у вас может быть несколько строк ProxyPassReverse:

    ProxyPassReverse / http://internal1.example.com/some-path
    ProxyPassReverse / http://internal2.example.com/some-path

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

В качестве последнего замечания имейте в виду, что Firebug чрезвычайно полезен при отладке перенаправлений.

1 голос
/ 10 октября 2008

Попробуйте использовать разъем AJP вместо обратного прокси. Конечно, это не тривиальное изменение, но я обнаружил, что многие кошмары с URL исчезают при использовании AJP вместо обратного прокси.

0 голосов
/ 09 марта 2019

Как правило, ProxyPassReverse должен позаботиться о переписывании заголовка Location для вас, как указал Кевин Хакансон.

Одна ловушка, с которой я столкнулся, - это отсутствие косой черты в аргументе url. Обязательно используйте:

ProxyPassReverse / http://internal1.example.com/some-path/

(обратите внимание на косую черту!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...