2014-11-24 4 views
2

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

<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 reverse proxy changes urlTransparent redirect to port 8080

+0

Для начала удалите: 'Переадресация Постоянный/бар http: // foo: 8080/bar'. Вы хотите прокси, а не перенаправлять. Ваши существующие директивы ProxyPass должны сделать это. – arco444

+0

Теперь я получаю 404 при входе на сайт www.foo.com/bar. Я обновил свой вопрос, чтобы отразить это изменение. –

+0

Имя вашего сервера - info.foo.com, что означает, что foo.com может поразить другой VHOST. – CodeTower

ответ

2

Try и редактировать конфиг для:

<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, чтобы избежать тэ/бар/бар вопрос вы могли лицом к лицу. Я много об этом не знаю, обратитесь к документации: http://httpd.apache.org/docs/2.2/mod/mod_alias.html

Попробуйте что-нибудь, как добавить это к вашему конфу

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

С помощью этого вы можете wan't удалить прокси.

+0

Это перенаправляет пользователя на http://foo.com:8080, отображая URL-адрес http://foo.com/bar, это действительно прогресс, но мне все еще нужно перенаправить на http://foo.com:8080/sparql , В качестве платы за проезд, которую я могу собрать, Alias ​​не работает, когда задействован порт. : S –