Apache proxy неправильный URL-адрес браузера

Apache proxy неправильный URL-адрес браузера

Я использую следующее VirtualHostи mod_proxy для проксирования всех запросов к моему поддомену 'api' на мой веб-сервис Java, который расположен на webapps/webserviceмоем Tomcat.

<VirtualHost *:80>
    ServerName api.mydoamin.com
    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass /webservice http://localhost:8080
    ProxPassReverse / http://localhost:8080
</VirtualHost>

Моя проблема в том, что если я ввожу «api.mydomain.com», то меня перенаправляют на «api.mydomain.com/webservice» и я получаю ошибку 404, потому что «webservicewebservice» недоступен.

Кто-нибудь знает, что делать?

Решение: Хотя я уже пробовал это решение раньше, Стоуни был прав! Проблема в моем случае была в том, что даже если я ничего не менял, мне приходилось перезапускать Tomcat, чтобы он заработал. Я перезапускал Apache несколько раз, но это ничего не изменило.

решение1

Я не знаю, правильно ли я понял вашу проблему, но если вы не хотите, чтобы webserviceв вашем URL-адресе было . Тогда установите для своего Proxy Pass значение /.

<VirtualHost *::80>
    ServerName api.mydoamin.com
    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://localhost:8080/webservice/
    ProxPassReverse / http://localhost:8080/webservice/
</VirtualHost>

Или вы хотите запустить свой веб-сервис под этим доменом? И вы не хотите перенаправления?

решение2

После некоторого тестирования и множества ошибок я наконец пришел к следующему решению.

Я настроил свой виртуальный хост Apache следующим образом:

<VirtualHost *:80>
    ProxyRequests Off
    ProxyPreserveHost On
    <Proxy *>
        Order deny, allow
        Allow from all
    </Proxy>                                                                        
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/

    ServerName api.mydomain.com
</VirtualHost>

Теперь он просто перенаправляет все запросы на api.mydomain.comмой Tomcat на порт 8080, не указывая на конкретный каталог.

Затем я добавил это /etc/tomcat7/server.xml:

<Host name="api.mydomain.com" appBase="webapps">
    <Context path="" docBase="webservice" />
</Host>

При ProxyPreserveHostактивации на моем виртуальном хосте Apache Tomcat получает имя хоста исходного запроса и может самостоятельно решать, какой контент доставлять.

При этом appBase="webapps"содержимое, по-видимому, доставляется из корневого каталога, даже если он расположен где-то в другом месте.

Связанный контент