Как обрабатывать несколько приложений через порт 443
Я ни в коем случае не эксперт в отношении apache (в нашем случае Oracle-версии apache, OHS) и перенаправления ввода в httpd.conf. У нас есть несколько приложений, развернутых в WLS 10.3.5 на одном сервере, и мы хотели бы, чтобы все они были доступны через порт 443.
Конечно, не все приложения могут быть развернуты на 443, тогда мы получим сообщение об ошибке, что порт используется.
Например, у нас app1 развернут на 3443, app2 развернут на 4443 и app3 на 5443. Наш клиент хотел бы иметь возможность просто ввести https:///app1 (или app2 или app3), а не https://:3443/app1 (или:4443/app2 или:5443/app3).
Возможно ли сделать это в httpd.conf (или ssl.conf)? Можно ли сделать так, чтобы в URL-адресах использовалось только 443, а затем в файлах conf перенаправить туда, где приложения фактически развернуты (3443, 4443 и 5443)?
3 ответа
Если вы используете OHS, то лучше использовать файл mod_wl_ohs.conf плагина прокси для обратного прокси. В mod_wl_ohs.conf вы можете добавить строки ниже
Проверьте http://docs.oracle.com/cd/E28280_01/web.1111/e37889/oracle.htm для получения дополнительной информации
Таким образом, вам больше не нужны дополнительные виртуальные хосты и вы используете OHS 443 для маршрутизации на несколько экземпляров weblogic.
Это, безусловно, может быть достигнуто, и то, как вы это сделаете, зависит от того, как работают ваши приложения; если они обслуживаются вашим веб-сервером, который просто прослушивает определенные порты, то вам необходимо изменить настройки, чтобы использовать VirtualHosts, как показано ниже:
<VirtualHost *:443>
ServerAlias app1.com
DocumentRoot /var/www/html/app1 #or however this app is configured
[the rest of your configuration directives for the app]
</VirtualHost>
<VirtualHost *:443>
ServerAlias app2.com
[As above but for app2]
</VirtualHost>
Принимая во внимание, что если ваши приложения обслуживаются другими процессами, прослушивающими отмеченные вами порты, вы можете настроить его, используя структуру, аналогичную описанной выше, но используя обратные прокси-серверы для обслуживания приложений через порт 443, например:
<VirtualHost *:443>
ServerAlias app1.com
ProxyPreserveHost on
SSLProxyEngine On
ProxyPass / http://localhost:5443/ #change the port here for the app in question
ProxyPassReverse / http://localhost:5443/ # change the port here for the app in question
SSLEngine on
[SSL directives as appropriate for your requirements]
</VirtualHost>
<VirtualHost *:443>
ServerAlias app2.com
ProxyPreserveHost on
SSLProxyEngine On
ProxyPass / http://localhost:5443/ #change the port here for the app in question
ProxyPassReverse / http://localhost:5443/ # change the port here for the app in question
SSLEngine on
[SSL directives as appropriate for your requirements]
</VirtualHost>
Таким образом, SSL обрабатывается веб-сервером, при этом запросы http передаются обратно тому приложению, которое прослушивает указанные порты, а приложения различаются по запрошенному имени хоста. Стоит отметить, что если приложения прослушивают эти порты и отвечают только по SSL, рекомендуется отключить SSL от них (и запустить его через Apache, как указано выше - после настройки также, конечно, закройте эти порты в брандмауэре. если они в данный момент открыты внешне).
Исходя из того, как вы описали свою ситуацию, это можно сделать с помощью ProxyPass. это модуль в Apache, который позволяет перенаправлять URL-запросы. Вот информация о apache.org
Для каждого vhost т.е. https://app1
вы добавите в настройки vhost
ProxyPass / https://app1:3443
ProxyPassReverse / https://app1:3443
Есть несколько хороших сайтов HowTo там. Но это должно привести вас в правильном направлении
Если они не заинтересованы в том, как выглядит URL, вы также можете использовать mod_rewrite, чтобы перенаправить их на правильный URL. Я не очень хорошо с этим синтаксисом, чтобы привести пример.
РЕДАКТИРОВАТЬ:
За 1 псевдоним хоста сервера. может перенаправить на основе сайта с
<VirtualHost *:443>
ServerAlias myserver.com
ProxyPreserveHost on
SSLProxyEngine On
ProxyPass /app1 http://localhost:3443/app1 #change the port here for the app in question
ProxyPassReverse /app1 https://localhost:5443/app1 # change the port here for the app
ProxyPass /app2 https://localhost:4443/app2
ProxyPassReverse /app2 https://localhost:4443/app2
ProxyPass /app3 https://localhost:5443/app3
ProxyPass /app3 https://localhost:5443/app3
SSLEngine on
[SSL directives as appropriate for your requirements]
</VirtualHost>