Пожалуйста, я безуспешно пытался настроить 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>