Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Apache Http Server proxy to Oracle Apex Listener / 8 сообщений из 8, страница 1 из 1
10.03.2014, 17:25
    #38582469
SOULURAN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Http Server proxy to Oracle Apex Listener
Использую Oracle 11.2 + Oracle Apex 4.2 с настроенным на него Oracle Apex Listener 2.3 для внутренней сети предприятия. Появилась необходимость дать доступ внешним пользователям (интернет), которые будут соединятся через DMZ (ОС Windows Server 2008 R2), и используя там Apache Http Server 2.4 с proxy модулем к Apex Listener. Установил и сконфигурировал Apache Http Server 2.4 с модулем mod_proxy:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so

Listen 8090

<VirtualHost test1:8090>
  ProxyRequests Off
  ProxyPreserveHost On
  LogLevel Debug

# Прокси на Apex-приложение
  ProxyPass        /apex http://apex.test.int:8090/apex/f?p134 retry=0
  ProxyPassReverse /apex http://apex.test.int:8090/apex/f?p=134

  <Location /*>
    Order Deny,Allow
    Allow from all  
  </Location>

</VirtualHost>



Но когда я в браузере (Internet Explorer) ввел адрес: test1:8090/apex, мне вернуло страницу с ошибкой от Apex Listener:
Код: html
1.
2.
3.
ORACLE APPLICATION EXPRESS LISTENER
400 - Bad Request
•The request path contains illegal characters


Как я понял, ошибка возникла из-за символа "?" в заданном URL в команде ProxyPass. Сам режим прокси работает, поскольку проверял на других внутренних сайтах (где не было в URL символа "?"), но мне нужно выдать доступ только на одно Apex-приложение, а адрес у них всегда содержит фразу "f?p=". Как правильно задать URL для этих приложений, в котором содержится символ "?", или как обойти эту ошибку?
...
Рейтинг: 0 / 0
11.03.2014, 00:08
    #38582600
SOULURAN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Http Server proxy to Oracle Apex Listener
Решил попробовать модуль mod_rewrite, который позволяет преобразовывать URL и выполнять редирект, а также как прокси ( http://httpd.apache.org/docs/current/rewrite/proxy.html). Изменил конфиг в httpd.conf:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Listen 8090

<VirtualHost test1:8090>
  ProxyRequests Off
  ProxyPreserveHost On
  LogLevel Debug

# Прокси на Apex-приложение
#  ProxyPass        /apex http://apex.test.int:8090/apex/f?p134 retry=0
#  ProxyPassReverse /apex http://apex.test.int:8090/apex/f?p=134

LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine On
RewriteRule /apex http://apex.test.int:8090/apex/f?p134 [P]

  <Location /*>
    Order Deny,Allow
    Allow from all  
  </Location>

</VirtualHost>



Перезапустил Apache Http Server, и ввел в браузере http://test1:8090/apex, после чего у меня открылась страница авторизации в Apex-приложение. Но кроме ввода логина и пароля, больше ничего не работало, такое ощущение, что загрузилась обычная html без java-скриптов, которые отправляют данные по авторизации. mod_rewrite помог зайти на страницу приложения, но все скрипты страницы при этом перестали работать (т.е. страница перестала быть интерактивной).
...
Рейтинг: 0 / 0
11.03.2014, 13:42
    #38582933
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Http Server proxy to Oracle Apex Listener
SOULURAN,

Не совсем понял, у вас задача какая, ограничить доступ ко всем приложениям, кроме 134, или 134 это у вас просто приложение по умолчанию ?

И почему у вас в одном месте f?p134, а в другом f?p=134 ?
...
Рейтинг: 0 / 0
11.03.2014, 14:24
    #38582962
SOULURAN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Http Server proxy to Oracle Apex Listener
SvDev,

Мне надо открыть доступ только для приложения http://apex.test.int/apex/f?p=134 - это есть прямая ссылка на Apex-приложение, которую юзает Apex Listener, и оно не по умолчанию.
f?p134 - это я тут случайно ввел без знака "=", а так в конфе f?p=134.
...
Рейтинг: 0 / 0
11.03.2014, 14:25
    #38582964
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Http Server proxy to Oracle Apex Listener
в общем, если вы пытались указать приложение по умолчанию, можно как-то так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
NameVirtualHost test1:8090
<VirtualHost test1:8090>
ServerName test1:8090
RewriteEngine On
RewriteRule ^/$ /f?p=134:1 [R,L]

ProxyPass / http://apex.test.int:8090/
ProxyPassReverse / http://apex.test.int:8090/
</VirtualHost>
...
Рейтинг: 0 / 0
11.03.2014, 14:33
    #38582974
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Http Server proxy to Oracle Apex Listener
SOULURANМне надо открыть доступ только для приложения http://apex.test.int/apex/f?p=134
Вы не учитываете, что кроме ссылок на приложения, у них есть общие ресурсы (картинки, public functions), поэтому этот подход - ограничивать доступ к приложениям через прокси, весьма ущербный.
Нельзя запретить полностью доступ ко всем ресурсам приложения, правда ограничить переход по некоторым ссылкам в принципе можно.

список разрешенных функций можно взять из документации (доступ через /apex)
http://docs.oracle.com/cd/E37099_01/doc/doc.20/e25066/config_file.htm#AELIG7205 apex, p, v, f, wwv_*, y*, c*
+ разрешены картинки (доступ через /i)

Поэтому тут проще спроксировать всё, кроме заданных url,
(не тестировал, но мне это видится как-то так)
Код: sql
1.
2.
3.
4.
RewriteCond %{REQUEST_URI} /apex/f
RewriteCond %{QUERY_STRING} ^p=
RewriteCond %{QUERY_STRING} !^p=134
RewriteRule переводим на страницу аля доступ запрещен




Но тут нужно еще учитывать, что могут найтись дырки:

f?p=134, допустим, вы запрещаете, а доступ можно будет получить через
Код: sql
1.
http://apex.test.int:8090/apex/wwv_flow.show?p_instance=30116304714473&p_flow_id=134&p_flow_step_id=1


(p_instance - сессия, p_flow_id - приложение, p_flow_step_id - страница)

т.е. запретить вам получается нужно:

/apex/f?p=134
wwv_flow.show?p_instance=цифры&p_flow_id=134

(это те, про которые мне известно, а я могу знать не все)
...
Рейтинг: 0 / 0
11.03.2014, 15:06
    #38583019
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Http Server proxy to Oracle Apex Listener
SvDevНо тут нужно еще учитывать, что могут найтись дырки:
А можно еще вот так вот приложение запросить, например:

f?p_trace=NO&p=134:LOGIN_DESKTOP:0

чтобы параметр p был вторым
...
Рейтинг: 0 / 0
11.03.2014, 16:32
    #38583124
SOULURAN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Http Server proxy to Oracle Apex Listener
Спасибо, SvDev. Получилось запустить приложение 134 по вот вашему конфигу:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
NameVirtualHost test1:8090
<VirtualHost test1:8090>
ServerName test1:8090
RewriteEngine On
RewriteRule ^/$ /f?p=134:1 [R,L]

ProxyPass / http://apex.test.int:8090/
ProxyPassReverse / http://apex.test.int:8090/
</VirtualHost>



Ввел в браузере URL - http://test1:8090/f?p=134, запустилось окно авторизации к приложению. Ввел логин и пароль, нажал Ок и Apex-приложение запустилось.

Насчет фильтрации пользовательских запросов и безопасности тут придется подумать еще. Но, спасибо, за предложенное направление действий.
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Apache Http Server proxy to Oracle Apex Listener / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]