Как ProxyPass к '/path/' вместо root '/'?
Я использую Ubuntu-15.10 хитрый, Apache-2.4.12
Я пытался использовать ProxyPass в VirtualHost с поддержкой SSL следующим образом:
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass /myapp/ http://127.0.0.1:8090/
ProxyPassReverse /myapp/ http://127.0.0.1:8090/
С вышеупомянутой конфигурацией я предположил, что все, что обслуживается сервером на этом порту, например web
будет добавлен к https://www.example.com/myapp/web
,
Однако это не то, что я получаю. В логах Apache я получаю:
... File does not exist: /var/www/html/web, referer: https://www.example.com/myapp/
Это потому что я не понимаю что ProxyPass
должен делать? Или в моей конфигурации что-то не так, что мне нужно исправить?
ADDENDUM (18 февраля 2016 г.)
Я включил ведение журнала для mod_proxy
и я вижу следующее, что не имеет смысла:
... connecting http://127.0.0.1:8090/ to 127.0.0.1:8090
... connected / to 127.0.0.1:8090
... fam 2 socket created to 127.0.0.1
... connection established with 127.0.0.1:8090 (127.0.0.1)
... connection complete to 127.0.0.1:8090 (127.0.0.1)
... http: has released connection for (127.0.0.1)
... proxy: connection shutdown
Я предполагаю, что один из адресов в первой строке является внутренним заполнителем, а другой - получаемым URL. Но почему во второй строке извлеченный URL-адрес подключается к /
вместо /myapp/
согласно ProxyPass?
1 ответ
Я нашел решение, но это не то, на что я надеялся, и не то, что я ожидал от моих чтений на ProxyPass
, Это может быть ошибка с моей стороны, или документация не так ясна, как это должно быть. ProxyPass
не может добавить проксированный URL к пути придуманного имени. Поэтому мне пришлось загружать приложение из каталога на указанном порту, а не из корня URL-адреса как такового:
ProxyPass /myapp http://127.0.0.1:8090/myapp
ProxyPassReverse /myapp http://127.0.0.1/myapp
Кроме того, А RewriteRule
необходимо также использовать, если есть ресурсы, которые необходимо загрузить, например, запросы, изображения, сценарии и т. д.
Правила переписывания будут:
RewriteEngine On
RewriteRule ^(.*) http://0.0.0.0:8090/$1 [P,L]
Я чувствую, что есть много других решений, которые могут включать другие прокси-модули и, возможно, RewriteRule
тем не менее, это тот, который так же прост, как мои знания в Apache.
Таким образом, суть, по крайней мере, первый компонент пути должен присутствовать на обоих концах, чтобы ProxyPass
делать свою работу. Я не могу использовать ProxyPath
для загрузки по пути я вношу без дополнительных сложностей в настройках прокси.
Я надеюсь, что кто-то найдет этот ответ помощи.