У меня есть приложение Java, которое должно общаться с другим веб-сайтом интрасети, используя HTTPS в обоих направлениях. Некоторое время после борьбы с реализациями SSL в Java я отказался от этого и теперь настроил Apache, который должен действовать как двунаправленный обратный прокси-сервер:

external app ---(HTTPS request)---> Apache ---(local HTTP request)---> Java app

Это направление работает просто отлично, а другое - нет:

Java app ---(local HTTP request)---> Apache ---(HTTPS request)---> external app

Это конфигурация для vhost, реализующего второй прокси:

Listen 127.0.0.1:8081

<VirtualHost appgateway:8081>
   ServerName appgateway.local

   SSLProxyEngine on
   ProxyPass        / https://externalapp.corp:443/
   ProxyPassReverse / https://externalapp.corp:443/
   ProxyRequests Off
   AllowEncodedSlashes On

   # we do not need to apply any more restrictions here, because we listened on
   # local connections only in the first place (see the Listen directive above)
   <Proxy https://externalapp.corp:443/*>
      Order deny,allow
      Allow from all
   </Proxy>
</VirtualHost>

curl http://127.0.0.1:8081/ должен служить эквивалентом https://externalapp.corp , но вместо этого выдается 403 Forbidden со следующим сообщением в журнале ошибок Apache:

[Wed Jun 04 08:57:19 2014] [error] [client 127.0.0.1] Directory index forbidden by Options directive: /srv/www/htdocs/

Это сообщение совершенно озадачивает: да, я не настроил никаких разрешений для DocumentRoot этого vhost, но все отлично работает для другого направления прокси, где у меня нет. Для справки, вот другой vhost:

Listen this_vm_hostname:443

<VirtualHost javaapp:443>
   ServerName javaapp.corp

   SSLEngine on
   SSLProxyEngine on
   # not shown: SSLCipherSuite, SSLCertificateFile, SSLCertificateKeyFile
   SSLOptions +StdEnvVars

   ProxyPass        / http://localhost:8080/
   ProxyPassReverse / http://localhost:8080/
   ProxyRequests Off
   AllowEncodedSlashes On

   # Local reverse proxy authorization override
   <Proxy http://localhost:8080/*>
      Order deny,allow
      Allow from all
   </Proxy>
</VirtualHost>

1 ответ1

1

Я нашел проблему. Это утверждение <VirtualHost> :

<VirtualHost appgateway:8081> # broken
<VirtualHost *:8081>          # works

Из-за неправильной спецификации VirtualHost HTTP-запросы не совпадали с виртуальным хостом. Поскольку ни один хост не был применим, использовалась конфигурация хоста по умолчанию, у которой нет действительного DocumentRoot , поэтому было показано сообщение Запрещено.

Другой виртуальный хост работал "случайно", поскольку его имя совпадает с именем хоста машины.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .