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

Правило перезаписи перед Proxypass

Имея приложение, работающее на порту 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 (которые необходимо перенаправить).