Имея приложение, работающее на порту 10001, я хотел бы иметь обратный прокси-сервер для его обслуживания hostname/ds
. Единственная проблема в том, что есть жестко связанные скрипты с /scripts/...
Это значит hostname/ds/
приведет меня к localhost:10001/
и hostname/scripts
сначала следует переписать URL-адрес запроса на hostname/ds/scripts/*
.
Моя конфигурация:
<VirtualHost *:80>
RewriteEngine on
RewriteRule /^scripts/(.*)$ /ds/scripts/$1 [L,PT]
ProxyPass /ds/ http://127.0.0.1:10001/
ProxyPassReverse /ds/ http://127.0.0.1:10001/
</VirtualHost>
Это не работает: hostname/scripts/
получает 404. а hostname/ds/scripts/
получает правильный ответ от приложения.
В соответствии с https://stackoverflow.com/questions/9003358/apache-rewrite-then-proxy-pass PT
должно сработать. Что я делаю не так?
у вас есть опечатка в вашем шаблоне, попробуйте ^/
вместо того /^
(последний никогда не будет совпадать)
Вы также можете сделать это, просто добавив второй ProxyPass для соответствия / scripts, например:
<VirtualHost *:80>
ProxyPass /scripts/ http://127.0.0.1:10001/
ProxyPassReverse /scripts/ http://127.0.0.1:10001/
ProxyPass /ds/ http://127.0.0.1:10001/
ProxyPassReverse /ds/ http://127.0.0.1:10001/
</VirtualHost>
Я знаю, что эта тема уже решена, но похоже, что вы пытаетесь использовать ProxyPass для доступа к веб-интерфейсу Synology DiskStation. Для тех, кто столкнулся с той же проблемой, в последней версии (DSM 5.1-5004 Update 2) мне пришлось использовать следующую конфигурацию со следующими RewriteRules:
<VirtualHost *:80>
RewriteRule ^/scripts/(.*)$ /ds/scripts/$1 [L,PT]
RewriteRule ^/webfm/(.*)$ /ds/webfm/$1 [L,PT]
RewriteRule ^/webapi/(.*)$ /ds/webapi/$1 [L,PT]
RewriteRule ^/webman/(.*)$ /ds/webman/$1 [L,PT]
ProxyPreserveHost On
ProxyRequests Off
ProxyVia Off
ProxyPass /ds/ http://192.168.1.10:5001/
ProxyPassReverse /ds/ http://127.0.0.1:5001/
</VirtualHost>
Это, очевидно, будет изменено в более новых версиях DS. Я нашел использование FireBug очень полезным при поиске папок, которые запрашивает DS (которые необходимо перенаправить).