Apache - обратный прокси и сообщение о состоянии HTTP 302

apache redirect reverse-proxy http-status-code-302

33608 просмотра

4 ответа

Моя команда пытается настроить обратный прокси-сервер 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

Автор: Rob Источник Размещён: 17.05.2019 02:49

Ответы (4)


12 плюса

Решение

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

Автор: Kevin Hakanson Размещён: 10.10.2008 12:42

3 плюса

Статья 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 чрезвычайно полезен при отладке перенаправлений.

Автор: Marcel Levy Размещён: 23.10.2009 04:50

1 плюс

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

Автор: James Schek Размещён: 09.10.2008 10:40

0 плюса

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

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

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

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

Автор: philippn Размещён: 09.03.2019 05:54
Вопросы из категории :
32x32