Помогите мне понять, как использовать ProxyPass

11

ОБНОВЛЕНИЕ: я добавил пересмотренный вопрос, поиграв с ним двумя ответами ниже.

Всем привет,

Если вы читаете это, вы, вероятно, знакомы с mod_proxy Apache и его функцией ProxyPass. Как и у многих других, у меня есть проблема с приложением, к которому я могу получить доступ из-за пределов нашей внутренней сети, но само это приложение обращается к другим внутренним приложениям на разных компьютерах, и когда вы получаете удаленный доступ с этой настройкой, дела идут не так хорошо.

Итак, моя установка очень проста, у меня есть:

На машине № 1 включен удаленный доступ, я получаю к нему доступ через имя хоста, и он выплевывает работающее на нем PHP-приложение.

Машина # 2 - это новое приложение, работающее под управлением Django, оно использует совершенно другой бэкэнд (даже аутентификацию), оно размещено на отдельной машине. В нашей интрасети мы обращаемся к нему через простое имя хоста, которое в основном ссылается на внутренний ip 192.168.0.101.

Я попытался поиграть с ProxyPass, чтобы настроить его так, например, переход в / new отправил бы его в новое приложение:

ProxyPass / new http://192.168.0.101/

Такого рода работы, он получает запрос к другому приложению, но не работает, потому что мое приложение Django хочет перенаправить в / auth / login /, которое оно мгновенно не распознает. Если я сам изменю URL-адрес на foo.net/new/auth/login, я получу страницу входа, но, как вы можете догадаться, делать это во время просмотра не удобно.

Так как же заставить ProxyPass работать так, как я хочу? Нужно ли что-то делать с Apache, чтобы он всегда записывал / новый перед URL в другом приложении, или это то, что я должен изменить в своем приложении Django?

Любые советы и указатели также будет принята с благодарностью. Спасибо за ваше время


источник

Ответы:

11

Вам следует изменить приложение django, чтобы оно находилось в / new / auth / login вместо / auth / login. Как правило, ваши пропуска должны выглядеть так:

ProxyPass /path http://192.168.0.101/path
ProxyPassReverse /path http://192.168.0.101/path

Это в сочетании с вашим приложением Django, которое должно быть в / new /, должно исправить ваши проблемы.

f4nt
источник
2

Используйте VirtualHost. Например, задайте имя A вашего сервера (например, sub.external.com ) для IP- адреса вашего сервера (например, 123.456.678 ).

Из соображений безопасности вам необходимо явно пересылать HTTP_HOST, если вы используете ProxyPass в settings.py , для билета # 6880 :

USE_X_FORWARDED_HOST = True

Затем добавьте следующее в Apache /etc/httpd/httpd.conf :

# Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf

Добавьте ваш VirtualHost в /etc/httpd/extra/httpd-vhosts.conf :

NameVirtualHosts *:80

<VirtualHost *:80>
  ServerName sub.external.com
  ProxyPass / http://127.0.0.1:8000/
</VirtualHost>

Теперь вы сможете получить доступ к своему сайту с http://sub.external.com, не беспокоясь о «путях»

Лионель
источник
1

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

Во-первых, приложение № 2 запускается http://192.168.0.101 .. оно не запускается http://192.168.0.101/path, так что ProxyPass не работает

Итак, поговорив с некоторыми ребятами из #apache из irc, я обнаружил, что мне нужно сделать что-то вроде этого:

RewriteCond% {HTTP_HOST} ^ app2.myremotedns.com *

RewriteRule. * Http://192.168.0.101/ [P]

Для этого нужно отправить правило перезаписи для любых запросов на app2.myremotedns.com для отправки на внутренний ip через прокси.

Это работает несколько, но имеет три проблемы:

  • При входе в систему на всех страницах, если я получаю доступ к чему-либо удаленно в app2, он перенаправляет в / auth / login ... однако, из-за текущей настройки Rewrite, я получаю цикл перенаправления до того, как Firefox просто перестает пробовать путь. Я думаю, это может быть связано с методами перенаправления Django, но я не совсем уверен.

  • Если я отключаю вход в систему, страницы работают, но не полностью. Кажется, я могу получить индексную страницу приложения № 2, но на самом деле больше ничего

  • Статические носители все сломаны, но это, вероятно, простое исправление .. не волнуйтесь об этом прямо сейчас.

Итак, у меня есть более сложная проблема, чем я представлял ... :)


источник
Использование любой конфигурации django, отличной от конфигурации по умолчанию, вызывает много проблем. Недавно я решил еще одну проблему с django и ProxyPass в моем блоге: fromzerotocodehero.blogspot.com/2011/01/…
1
Вы нашли какое-нибудь решение по этому вопросу? У меня точно такие же проблемы, особенно с потерей медиа-стилей и т. Д.
membersound