Я новичок и унаследовал платформу Liferay 6, которая действует как корпоративный портал, он также содержит некоторые iframes, которые прокси для внешних приложений (на других серверах).
Каждый iframe использует виртуальный хост на своемпорт на Apache, затем запрос перенаправляется (проксируется) на сервер приложений Wright.
Фактическая конфигурация:
- Os CentOS 6x64
- Liferay 6 + Apache2.2
- имя сервера: portal.example.com
- URL-адрес примера iframe: https://portal.example.com:1045/app1/j_security_check
- j_security_check используется для передачи аутентификации пользователя приложению, поэтому оно открываетсянапрямую.
- на Apache есть виртуальный хост для каждого iframe, подобный этому:
<VirtualHost *:1045>
ServerName portail.example.com
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/commercial.crt
SSLCertificateKeyFile /etc/httpd/ssl/commercial.key
SSLCACertificateFile /etc/httpd/ssl/commercial_ca.pem
ProxyPass /app1 http://192.168.1.10:7777/app1
ProxyPassReverse /app1 http://192.168.1.10:7777/app1
</VirtualHost>
И на портале много таких перенаправлений,и, как вы можете видеть, для каждого приложения в Apache используется новый порт.
Мы хотели изменить эту конфигурацию, используя только один виртуальный хост на порту 443, и собрать все прокси-приложениясвязи с этим одним виртуальным хостом, например:
прослушивание 443
имя_сервера portal.example.com
<Proxy *>
Require all granted
</Proxy>
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/commercial.crt
SSLCertificateKeyFile /etc/httpd/ssl/commercial.key
SSLCACertificateFile /etc/httpd/ssl/commercial_ca.pem
# App1
ProxyPass /app1 http://192.168.1.10:7777/app1
ProxyPassReverse /app1 http://192.168.1.10:7777/app1
# App2
ProxyPass /app2 http://192.168.1.10:7777/app2
ProxyPassReverse /app2 http://192.168.1.10:7777/app2
# App3
ProxyPass /app3 http://192.168.1.15/app3
ProxyPassReverse /app3 http://192.168.1.15/app3
# Main Site
ProxyPass / http://localhost:8080/ retry=0 Keepalive=On timeout=1600
ProxyPassReverse / http://localhost:8080/
setenv proxy-initial-not-pooled 1
RemoteIPHeader X-Forwarded-For
При использовании новой конфигурации мыget:
- Если параметр j_security_check передается с URL-адресом iframe после аутентификации пользователя на портале: мы получаем пустую страницу, если мы ее удаляем, iframe перезагружается, и приложение отображается и открывается.
- Если j_security_check не передается после аутентификации пользователя, приложение отображается в iframe, но мы получаем страницу входа приложения, если мы аутентифицируемся, мы должны обновить страницу (F5), чтобыприложение откроется.
- Если мы получим доступ к приложению напрямую по прокси-адресу: https://portal.example.com/app1, мы получим страницу входа приложения.
Итак, в заключение:
- Похоже, что прокси-сервер выполняет свою работу, поскольку мы видим страницу приложения.
- j_security_check проходит аутентификацию пользователя, но я не вижуошибка, которая может объяснить, почему приложение не отображается в iframe.
- Почему при использовании разных портов на многих виртуальных хостах оно работает, а при использовании на виртуальном хосте и прокси-сервере все приложения - нет?
Я пытался использовать:
- CentOS 7 и Apache 2.4
- CentOS 7 и Nginx 1.12
- CentOS 6 и Apache 2.2
И это то же самое поведение.
С уважением.