Apache2 ProxPassReverse с перенаправлением и контекстом tomcat

Я не могу правильно настроить обратный прокси-сервер apache2 для контекстного приложения Tomcat.

Я использую URL-адрес www.projet-okinawa.ch в браузере для внешнего доступа к приложению.

Мой tcp-порт 80 маршрутизируется на 8080 iptables.

(sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080)

Я определил виртуальный хост, чтобы поймать URL-адрес www.projet-okinawa.ch с порта 8080 и перенаправить запрос на порт ssl.

<VirtualHost *:8080>
        ServerName www.projet-okinawa.ch
        ServerAlias projet-okinawa.ch
        Redirect permanent / https://www.projet-okinawa.ch:8443/
</VirtualHost>

I defined a second virtual host to catch the same url from the port 8443 that enable ssl and manage the reverse proxy.
<VirtualHost *:8443>
        ServerName www.projet-okinawa.ch
        ProxyRequests Off
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>
        ProxyPass / http://web.projet-okinawa.org:8081/okinawa
        ProxyPassReverse / http://web.projet-okinawa.org:8081/okinawa
        <Location />
                Order allow,deny
                Allow from all
        </Location>
        SSLCertificateFile /etc/letsencrypt/live/os-vps276.projet-okinawa.org/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/os-vps276.projet-okinawa.org/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/os-vps276.projet-okinawa.org/chain.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>

Вы можете заметить, что для контекста веб-приложения задано значение / okinawa.

Моя конфигурация tomcat прослушивает TCP-порт 8080, 8081 и 8443.

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
<Connector port="8081" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           proxyName="www.projet-okinawa.ch" proxyPort="8443" scheme="https" />
<Connector port="8443"
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150"
           SSLEnabled="true"
           scheme="https"
           secure="true"
           clientAuth="false"
           sslProtocol="TLS"
           URIEncoding="UTF-8"
           keystoreFile={keystore} keystorePass={password} />

Веб-приложение выполняется на локальном хосте Catalina в контексте / okinawa. Контекст был определен не с помощью дескриптора контекста, а с помощью автоматического развертывания. Приложение работает правильно и доступно для внутреннего использования через порт 8080 (например: http://web.projet-okinawa.org/okinawa/participatewithus.html).

При доступе к нему через прокси с помощью www.projet-okinawa.ch я получил HTTP-статус 404 - / okinawaokinawa / exception.

Я тестировал много разных способов настройки обратного прокси, но безуспешно. Я не понимаю, почему возвращаемый URL-адрес не подключается к www.projet-okinawa.ch без контекста, который кажется дублированным.

Любая помощь приветствуется.


person Michel Wicky    schedule 29.04.2016    source источник


Ответы (1)


Я обнаружил свою ошибку, внимательно прочитав http://httpd.apache.org/docs/current/mod/mod_proxy.html.

«Если первый аргумент заканчивается завершающим /, второй аргумент также должен заканчиваться завершающим /, и наоборот. В противном случае результирующие запросы к бэкэнду могут пропустить некоторые необходимые косые черты и не доставить ожидаемых результатов».

ProxyPass / http://web.projet-okinawa.org:8081/okinawa/
ProxyPassReverse / http://web.projet-okinawa.org:8081/okinawa/

решил мою проблему.

person Michel Wicky    schedule 29.04.2016