Допоможіть мені зрозуміти, як користуватися ProxyPass


11

ОНОВЛЕННЯ: Я додав переглянуте питання, розібравшись з ним двома відповідями нижче.

Привіт,

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

Отже, моя установка дуже проста, у мене є:

У машині №1 ввімкнено віддалений доступ, я отримую доступ до нього через ім'я хоста, і він випилює програму PHP, що працює на ньому.

Машина №2 - це новий додаток під керуванням Django, він використовує зовсім інший бекенд (навіть автентичний), він розміщений на окремій машині. У нашій інтрамережі ми отримуємо доступ до нього через просте ім'я хоста, яке в основному посилається на внутрішній ip 192.168.0.101.

Я намагався грати з ProxyPass, щоб налаштувати його, наприклад, перехід до / new надішле його новій програмі:

ProxyPass / новий 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, який очікує, що ви будете / новим /, має вирішити ваші проблеми.


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 .. однак, завдяки поточній установці перезапису, я отримую цикл переспрямування, перш ніж Firefox просто перестане пробувати шлях. Я думаю, це може мати щось спільне з методами переадресації Джанго, але я не зовсім впевнений.

  • Якщо я відключу вхід, сторінки спрацьовують, але не повністю. Я, здається, зможу отримати індексну сторінку додатка №2, але насправді нічого іншого

  • Статичні носії все порушені, але це, мабуть, просте виправлення .. не переживаючи про це зараз.

Отже, у мене складніше питання, тоді я уявляв ... :)


Використання будь-якої конфігурації джанго, відмінної від типової, викликає багато проблем. Нещодавно щось вирішило ще одне питання з django та ProxyPass в моєму блозі: fromzerotocodehero.blogspot.com/2011/01/…

1
Ви знайшли рішення щодо цього? У мене точно такі ж проблеми, особливо з втратою медіа-стилів тощо.
члени звучать
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.