Обратный прокси: нежелательное изменение URL

У меня есть веб-сервис, который я хотел бы открыть через URL foo.com/bar. Однако мой обратный прокси-сервер Apache не работает должным образом. Я создал файл 001-default.conf, который содержит следующий код:

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass /bar http://foo.com:8080/bar
    ProxyPassReverse /bar foo.com:8080/bar

    DocumentRoot /var/www/foo/
    ServerName info.foo.com
    <Directory /var/www/foo>
            Options Indexes FollowSymLinks MultiViews Includes
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>
</VirtualHost>

Прямо сейчас я получаю 404 код ошибки.

Я хочу, чтобы все обращения на foo.com/bar автоматически перенаправлялись на foo.com:8080/bar, что означает, что пользователь должен видеть только URL foo.com/bar. Перенаправление обратного прокси-сервера также должно включать такие запросы, как foo.com/bar?=foobar.

Я включил proxy_http и прокси:

% sudo a2enmod proxy_http        
  Considering dependency proxy for proxy_http:
  Module proxy already enabled
  Module proxy_http already enabled

Я надеюсь, что есть кто-то, кто сможет мне в этом помочь.

Аналогичная проблема, которая не решила мою проблему: обратный прокси-сервер apache изменяет URL-адрес Прозрачное перенаправление на порт 8080


person Kim Ahlstrøm Meyn Mathiassen    schedule 24.11.2014    source источник
comment
Для начала удалите: Redirect Permanent /bar http://foo:8080/bar. Вы хотите использовать прокси, а не перенаправлять. Ваши существующие ProxyPass директивы должны это делать.   -  person arco444    schedule 24.11.2014
comment
Теперь я получаю 404 при входе на www.foo.com/bar. Я обновил свой вопрос, чтобы отразить это изменение.   -  person Kim Ahlstrøm Meyn Mathiassen    schedule 24.11.2014
comment
Имя вашего сервера - info.foo.com, что означает, что foo.com может попасть на другой VHOST.   -  person CodeTower    schedule 24.11.2014
comment
Попробуйте добавить http: // в директиву обратного прохода прокси   -  person CodeTower    schedule 24.11.2014
comment
Какую версию Apache вы используете?   -  person CodeTower    schedule 24.11.2014
comment
@Kabahango Я удалил имя сервера, потому что не использую его. Http: // ничего не делает. Я использую Apache / 2.4.7 (Ubuntu).   -  person Kim Ahlstrøm Meyn Mathiassen    schedule 24.11.2014


Ответы (1)


Попробуйте отредактировать конфигурацию, чтобы:

<VirtualHost *:80>
    <Proxy *> 
            Order deny,allow
            Allow from all
    </Proxy>
    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass /bar http://foo.com:8080  # Note removed /bar
    ProxyPassReverse /bar foo.com:8080  # Note removed /bar

    DocumentRoot /var/www/foo/
    ServerName info.foo.com
    <Directory /var/www/foo>
            Options Indexes FollowSymLinks MultiViews Includes
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>
</VirtualHost>

Вы также можете попробовать с mod_alias, чтобы избежать проблемы с te / bar / bar, с которой вы можете столкнуться сейчас. Я мало что знаю об этом, см. Документацию: http://httpd.apache.org/docs/2.2/mod/mod_alias.html.

Попробуйте что-то вроде добавления этого в свой конф

 Alias /bar http://foo.com:8080

Используя это, вы можете не удалять прокси.

person CodeTower    schedule 24.11.2014
comment
Это перенаправляет пользователя на страницу foo.com:8080 с отображением URL foo.com/bar, это действительно прогресс, но мне все еще нужно перенаправить на foo.com:8080/sparql. Насколько я понимаю, псевдоним не работает, когда задействован порт. : S - person Kim Ahlstrøm Meyn Mathiassen; 24.11.2014