Различные настройки HTTPD vhost и обратного прокси для подпапок на одном хосте и порту

Пожалуйста, я безуспешно пытался настроить httpd. Мне нужно следующее поведение:

  • если я получу доступ https://example.org/, https://example.org/что-нибудь/…/... -> Мне нужен прокси для localhost: 8080 (tomcat) с сохраненным именем хоста «example.org» в http-запросе ProxyPreserveHost On
  • если я получу доступ https://example.org/api/system-a/... -> Мне нужен прокси на внешний сервер без сохраненного имени хоста «example.org» в http-запросе ProxyPreserveHost Off

Настройки SSL, имя хоста, порт и т. д. должны быть одинаковыми для обоих URL…

Я не смог найти решение в httpd (в nginx вы просто перемещаете директиву proxy_set_header Host $host/$proxy_host на один уровень ниже от http или же server к location раздел конфигурации, но в httpd, насколько мне известно, такого нет). Мне не удалось запустить 2 виртуальных хоста с одинаковым именем сервера и портом…

Listen 443 https

<VirtualHost *:443>
    ServerName  example.org

    SSLEngine On

    SSLProxyEngine On
    ProxyErrorOverride On
    ProxyPreserveHost On
    ProxyRequests Off
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off

    ProxyPass         /api/system-a/   https://external-domain.example2.org/system-a/
    ProxyPassReverse  /api/system-a/   https://external-domain.example2.org/system-a/

    ProxyPass        / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/

    SSLEngine On
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
    SSLProtocol All -SSLv2 +TLSv1.2
    SSLCipherSuite HIGH:!aNULL:!MD5
    SSLHonorCipherOrder On
    RequestHeader set X-Forwarded-Proto   "https"

    SSLCompression off
    SSLSessionTickets Off
    SSLCertificateFile      /etc/ssl/certs/server.crt
    SSLCertificateKeyFile /etc/ssl/private/server.key

    #websockets
    RewriteEngine On
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
    RewriteRule .* ws://localhost:8080%{REQUEST_URI} [P]

    ProxyPass        /websocket/ "ws://localhost:8080/websocket/"
    ProxyPassReverse /websocket/ "ws://localhost:8080/websocket/"
</VirtualHost>

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *