Назад | Перейти на главную страницу

Прокси всех запросов для поддомена на ip через htaccess / apache

Скажем, у меня есть следующий поддомен с собственным корнем документа и т. Д.:

monad2.mysite.com

Я хочу, чтобы все запросы передавались на IP-адрес (например, 193.159.3.129), но они должны проходить через сервер в mysite.com (при условии monad2 находится на этом же сервере).

У меня есть следующая конфигурация (htaccess), которая работает до поддомена, но не может проксировать любой другой запрос ...

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://193.159.3.129/$1 [P]

Моя проблема в том, что пока он работает для http://monad2.mysite.com/a.php (url остается прежним), он не работает с такими запросами, как http://monad2.mysite.com/a/b (URL преобразован в http://193.159.3.129/a/b). Обратите внимание, что последний адрес показывает список каталогов проксируемого сервера, который является правильным, за исключением того, что субдомен изменился на ip.

Кроме того, я полагаю, эта система определенно не будет работать с запросами HTTPS, верно?

Редактировать: После еще нескольких попыток устранения неполадок я точно нашел причину проблемы. Всякий раз, когда я пытаюсь получить доступ к каталогу без последней косой черты, прокси не работает, и я получаю IP-адрес. Пример:

Original                        | Result
--------------------------------+--------------------------------
http://monad2.mysite.com        | http://monad2.mysite.com
http://monad2.mysite.com/a/     | http://monad2.mysite.com/a/
http://monad2.mysite.com/a      | http://193.159.3.129/a/           <- !
http://monad2.mysite.com/a.php  | http://monad2.mysite.com/a.php

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

ProxyPass и ProxyPassReverse не может быть в .htaccess файл - поэтому замените текущее правило перезаписи этим, которое должно быть внутри вашего <VirtualHost> блок для поддомена:

ProxyPass / http://193.159.3.129/
ProxyPassReverse / http://193.159.3.129/

В стороне: не используйте .htaccess когда можно этого избежать. Обзор Документация Apache по этому вопросу.

Как правило, вы должны использовать файлы .htaccess только тогда, когда у вас нет доступа к основному файлу конфигурации сервера.