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

Динамически обратный прокси из подпапки в поддомен в Apache

Я хотел бы динамически проксировать подпапки для поддоменов на другом хосте. Например, у меня есть следующая установка обратного прокси для одной подпапки в поддомен:

ProxyRequests Off

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyPass /app1/ http://app1.myotherserver.tld/
ProxyPassReverse /app1/ http://app1.myotherserver.tld/

Вышеупомянутое работает нормально (за исключением завершающего символа "/"). Однако мне нужно добавить еще 10 таких же, как app2, app3, app4 и т. Д. ... и, возможно, больше в будущем. Очевидно, нет смысла добавлять каждую.

Используя страницу в http://httpd.apache.org/docs/current/rewrite/proxy.html в качестве справки я делаю это:

RewriteRule ^/(.*)/$ http://$1.myotherserver.tld/ [P]
RewriteRule ^/(.*)/(.*)$ http://$1.myotherserver.tld/$2 [P]
ProxyPassReverse /$1/ http://$1.myotherserver.tld/

Это вроде работает, но мои существующие подпапки попадают под это правило, и у меня все еще есть проблема с завершающим "/".

Я пробовал добавить "?" к первому правилу, но это все нарушает:

RewriteRule ^/(.*)?/$ http://$1.myotherserver.tld/ [P]

Как мне сделать так, чтобы что-то вроде "http; // www.mywebserver.tld / app2" работало, но при этом разрешить действующие URL-адреса, такие как эти?

http://www.mywebserver.tld/style.css 
http://www.mywebserver.tld/images/title.png
http://www.mywebserver.tld/existingsubfolder
http://www.mywebserver.tld/existingsubfolder/page.php

Вы захотите использовать условия перезаписи, чтобы убедиться, что файлы не существуют перед проксированием.

Кроме того, можно добиться желаемого поведения с помощью всего одного правила:

RewriteCond /path/to/docroot%{REQUEST_URI} !-f
RewriteCond /path/to/docroot%{REQUEST_URI} !-d
RewriteRule ^/[^/]*/(.*)$ http://$1.myotherserver.tld/ [P]

ProxyPassReverse /$1/ http://$1.myotherserver.tld/