У меня проблема с ProxyPass на моем сервере Apache в Ubuntu. Я настроил Apache для работы с виртуальными хостами на моем сервере. Есть приложение, которое запускается на сервере и использует порты 8001 8002. Мне нужно сделать что-то вроде www.example.com/demo/origin
для отображения содержимого, которое я увижу при посещении www.example.com:8000
. Отображаемое содержимое представляет собой множество HTML-страниц.
Это раздел конфигурации виртуального хоста, в котором есть проблемы
ProxyPass /demo/vader http://www.example.com:8001/
ProxyPassReverse /demo/vader http://www.example:8001/
ProxyPass /demo/skywalker http://www.example.com:8002/
ProxyPassReverse /demo/skywalker http://www.example.com:8002/
Теперь, когда я приезжаю example.com/demo/skywalker
, Я вижу первую страницу порта 8002, говорят login.html
страница.
Второй должен был быть www.example.com/demo/skywalker/userAction.html
, вместо этого сервер показывает www.example.com:8000/login.html
. В журналах ошибок я вижу что-то вроде:
[Mon Nov 11 18:01:20 2013] [debug] mod_proxy_http.c(1850): proxy: HTTP: FILE NOT FOUND /htdocs/js/demo.72fbff3c9a97f15a4fff28e19b0de909.min.js
У меня в системе нет папки htdocs.
Это проблема только при просмотре .html
страниц. В противном случае такой проблемы не возникает.
Когда я приезжаю localhost:8001
он будет отображать все содержимое без каких-либо ошибок или проблем.
www.example.com/demo/skywalker
отображает отдельную веб-страницу
www.example.com/demo/origin
отображает другую веб-страницу
и
www.example.com/demo/vader
отображает другую веб-страницу.
Я также пробовал использовать еще одну комбинацию,
<Location /demo/origin/>
ProxyPass http://localhost:8000/
ProxyPassReverse http://localhost:8000/
ProxyHTMLURLMap http://localhost:8000/ /
</Location>
Это тоже не удается.
Буду очень признателен, если кто-нибудь поможет мне решить эту проблему.
Что касается Apache Reeves, есть ли у вас эти настройки?
# Proxy specific settings
ProxyRequests Off
ProxyPreserveHost On
Причина, по которой я спрашиваю, заключается в том, что ошибка связана с тем, что файл JavaScript не загружается. И CORS не позволит JavaScript загружать контент из того же домена. И ProxyPreserveHost
сохранит example.com
при обращении к www.example.com:8001
или www.example.com:8002
РЕДАКТИРОВАТЬ: Попробую более конкретный пример. Я предлагаю вам переделать логику прокси и попробовать это.
# Settings for adding a trailing slash to the URL
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(demo)$
RewriteRule ^(.*)$ http://%{HTTP_HOST}$1/ [R=301,L]
# Settings for Apache Reverse Proxying
<IfModule mod_proxy.c>
# Proxy specific settings
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
ProxyPass /demo/vader http://www.example.com:8001/
ProxyPassReverse /demo/vader http://www.example:8001/
ProxyPass /demo/skywalker http://www.example.com:8002/
ProxyPassReverse /demo/skywalker http://www.example.com:8002/
</IfModule>