Перенаправить часть трафика на другой сервер

На моем сервере я хотел бы перенаправить весь трафик, доступ к которому осуществляется через порт 80, через:

http://12.34.56.78/blahblah/...

к веб-серверу Python, прослушивая, например, порт 7777...

... и сохранить все остальное http://12.34.56.78/(что-нибудьеще)/.. Т.е до /home/www/ с Apache.

При доступе к http://12.34.56.78/blahblah/ я получаю:

Внутренняя Ошибка Сервера

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

Почему это не работает со следующей конфигурацией Apache?

<VirtualHost *:80>
  ServerName 12.34.56.78
  DocumentRoot /home/www/
  <Directory />
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Allow from all
    Require all granted
  </Directory>
</VirtualHost>

<VirtualHost *:80>
  ServerName 12.34.56.78
  <Directory /blahblah/>
    RewriteEngine On
    RewriteRule /(.*)           localhost:7777/$1 [P,L]
  </Directory>
</VirtualHost>

person Basj    schedule 31.07.2015    source источник


Ответы (1)


Проблема просто в том, что вы используете второй виртуальный хост с mod_rewrite.

Принцип работы RewriteRule заключается в том, что вы указываете путь в URL-адресе для соответствия, и он перезаписывает что-то другое (или прокси в данном случае).

Кроме того, элементы каталога говорят о конкретных реальных каталогах на хостах. Судя по вашему вопросу, вы не хотите, чтобы ваши RewriteRules находились внутри элемента Directory.

Кроме того, вы должны указать схему URL-адресов в своем проксированном RewriteRule.

Что-то в этом духе должно работать.

<VirtualHost *:80>
  ServerName 12.34.56.78
  DocumentRoot /home/www/
  <Directory />
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Allow from all
    Require all granted
  </Directory>
  RewriteEngine On
  RewriteRule ^/blahblah(.*)$           http://localhost:7777$1 [P,L]
</VirtualHost>
person James Andariese    schedule 31.07.2015