Публикация приложений Oracle Application Express (APEX) через Apache http server (Apache) в режиме прокси

В моем случае, стала необходимость публиковать приложения разработанные в Oracle APEX в Интернет через DMZ (демилитаризованную зону), при этом не изменяя настроек соединения для пользователей локальной сети, которые подключаются через APEX Listener. Реализовать это все, было принято, с помощью Apache Http Server (Apache), который можно настроить как прокси-сервера, и он имеет свои средства защиты в дополнение к DMZ.

APEX DMZ


Какие версии дистрибутивов использовал:

Установка Oracle APEX и Oracle APEX Listener в этой статье не рассматриваются.


Инсталляция Apache Http Server

Сразу перейдем к установке и настройке Apache на машине (ОС Windows Server 2008 R2), входящей в DMZ.

1. Разархивируем скачанный архив дистрибутива Apache в корень диска C. Должен появиться каталог C:\Apache24.

Note: Если используете другой диск, тогда в имеющемся файле конфигурации Apache24/conf/httpd.conf поменяйте пути на свой диск. В этой статье я использовал имеющийся конфиг, который потом отредактировал под свои нужды.

2. Для инсталляции Apache, как сервис Windows требуется, чтобы на компьютере был установлен компонент Visual C++ Redistributable for Visual Studio 2012 Update 4, который можно взять отсюда http://www.microsoft.com/en-us/download/details.aspx?id=30679.

4. Инсталлируем Apache как сервис, для этого запускаем исполняемый файл httpd.exe с опциями: C:\Apache24\bin\httpd.exe -k install -n “AppWeb”

5. В файле «c:\Apache24\conf\httpd.conf» изменим порт слушателя с 80 (это по умолчанию) на 8090 (порт моего Apex Listener):
Listen 8090

6. Запустим Apache через httpd.exe (но можно запустить и через созданный сервис AppWeb в службах Windows):
C:\Apache24\bin\httpd.exe –k start

7. Проверим работу Apache. Для этого запустим интернет-браузер и введем адрес: http://localhost:8090

Если отобразилась страница с текстом: It works! => Apache работает.


Конфигурация Apache Htpp Server как прокси сервер и доступ к APEX-приложениям

Чтобы Apache работал как проски-сервер и имелся доступ только к определенным приложениям APEX, понадобятся модули mod_proxy и mod_rewrite, которые имеются в данном дистрибутиве.

mod_proxy – модуль позволяющий использовать Apache как прокси сервер (http://httpd.apache.org/docs/current/mod/mod_proxy.html#proxyvia).
mod_rewrite – модуль позволяющий динамически изменять URL, выполнять функции редиректа и проксирования (http://httpd.apache.org/docs/2.4/ru/mod/mod_rewrite.html#rewriterule).

Для осуществления задуманного, отредактируем файл конфигурации httpd.conf, добавив или раскомментировав некоторые строки. Ниже приведен конфигурация Apache с защитой от некоторых веб-атак (в этой статье не расписан полный ракурс осуществления защиты моих веб-приложений).

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_http_module modules/mod_proxy_html.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so

Listen 8090
Timeout 30

ServerTokens Prod
ServerSignature Off 

AcceptFilter https none
AcceptFilter http none
EnableSendfile Off
EnableMMAP Off

RewriteEngine On
RewriteCond %{THE_REQUEST} !HTTP/1\.1$
RewriteRule .* - [F]

FileETag None
Header always append X-Frame-Options SAMEORIGIN
Header set X-XSS-Protection "1; mode=block"

ErrorDocument 404 "Sorry, but this page not found!"
ErrorDocument 502 "Sorry, but this resource is not available!"

# формат записей в логах
LogFormat "%h %l %u %t \"%{sessionID}C\" \"%r\" %>s %b %T" common

# задание виртуальной среды
NameVirtualHost dmzserv01:8090
<VirtualHost dmzserv01:8090>
 LogLevel Debug
 ProxyRequests Off
 ProxyPreserveHost On

Options -Indexes
 Options -FollowSymLinks
 Options -Includes -ExecCGI

<Proxy /apex>
 Order deny,allow
 Allow from all
 </Proxy>

# Проксирование на сайт apex
ProxyPass / http://apex.test.int:8090/
ProxyPassReverse / http://apex.test.int:8090/

# По умолчанию перебрасывает на приложение 135
#RewriteCond %{REQUEST_URI} /
#RewriteRule ^/$ /apex/f?p=135 [R]

# Доступ только к приложению 138 и 135
RewriteCond %{REQUEST_URI} /apex/f
RewriteCond %{QUERY_STRING} ^p=
RewriteCond %{QUERY_STRING} !^p=138
RewriteCond %{QUERY_STRING} !^p=135
RewriteRule ^.*$ - [F]

# логи действий и ошибок сайта apex
ErrorLog c:\Apache24\logs\apex_error.log
CustomLog c:\Apache24\logs\apex_access.log combined
</VirtualHost>

Теперь, если указать в браузере (Internet Explorer) http://dmzserv01:8090/apex/f?p=138, то сработаем проксирование на наш сайт apex через apex listener и получим доступ к приложению 138.

Если не работает, попробуйте в браузере добавить хост или ip машины Apache и Apex Listener в исключения прокси, или же в браузере в Безопасности — локальная сеть — добавьте адрес машины Apache и адрес машины Apex listener. Иногда требуется внесения некоторых изменений в файл c:\Windows\System32\drivers\etc\hosts.

Реклама