Настройка Apache для маршрутизации запросов (redirect) к базам на разных серверах

1. MDR_Tiger 06.08.23 12:13 Сейчас в теме
Одна голова - хорошо, а целое сообщество - ещё лучше.

Помогите, пожалуйста, решить задачу.

Дано:
SERVER - главный сервер, куда поступают запросы пользователей для подключения к базам, но на самом сервере ни агента сервера 1С, ни баз данных нет. Это веб-сервер с настроенным Apache.
SERVER_01 - Сервер с базами данных. Там есть свой Apache, агент сервера 1С, СУБД и, естественно, опубликованные базы.
SERVER_02 - Сервер с базами данных. Там есть свой Apache, агент сервера 1С, СУБД и, естественно, опубликованные базы.

Используется платформа 1С версии 8.3.22.1923.
Apache на компьютере SERVER версии 2.4
Apache на компьютерах SERVER_01 и SERVER_02 версии 2.2

На компьютере "SERVER" в конфигурационном файле Apache на уровне сервера добавил строки:

Redirect permanent /db01 http://SERVER_01/db01
Redirect permanent /db02 http://SERVER_02/db02

В строке браузера набираю "http://SERVER/db01" или "http://SERVER/db02" - работает доступ к базам, а через тонкого клиента (платформу 1С) вход в базу сопровождается ошибкой:

| Ошибка при выполнении операции с информационной базой
| Попытка начала сеанса с информационной базой завершилась неудачно

Найти:
Как настроить Apache, чтобы пользователь, обращаясь по адресу http://SERVER/db01 попадал в базу http://SERVER_01/db01 через тонкого клиента (платформу 1С)?
Как настроить Apache, чтобы пользователь, обращаясь по адресу http://SERVER/db02 попадал в базу http://SERVER_02/db02 через тонкого клиента (платформу 1С)?

------------
Я уже и "RedirectMatch" пробовал, и "AliasMatch" - ничего не помогает. Для браузера все варианты подходят, а через платформу никак не хочет в базу заходить. В настройках Apache я не особо силён.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starik-2005 3096 07.08.23 11:29 Сейчас в теме
(1)
Как настроить Apache, чтобы пользователь, обращаясь по адресу http://SERVER/db01 попадал в базу http://SERVER_01/db01 через тонкого клиента (платформу 1С)?
Поштото мне кажется, что по адресу дб01 будет просто корневой каталог сервера 1. И чтобы добраться до базы, нужно, видимо, что-то типа "сервер/дб01/мияпубликации". Но тут другая проблема - 1С же генерит внутренние ссылки исходя из того, что она на сервер01, а не на сервер. Наверное можно как-то это разрулить, особенно если из браузера все работает...
4. MDR_Tiger 07.08.23 15:11 Сейчас в теме
(2)
Адреса нормальные. Это и есть публикации баз.
Фишка в том, что браузер отрабатывает корректно редирект. Со всеми дальнейшими путями.
3. spacecraft 07.08.23 11:50 Сейчас в теме
(1) тонкий клиент редирект не поддерживает.
Тут нужно настраивать алиас.
5. MDR_Tiger 07.08.23 15:19 Сейчас в теме
(3)
Тут нужно настраивать алиас.


Алиас пробовал, но он же, получается, внутри сервера "SERVER" будет работать. А все запросы надо слать подальше... На "SERVER_01" и "SERVER_02". Получается, что опять редиректить, только внутри алиаса, но это же всё равно будет редирект. Хрень редьки не слаще, по-моему. Или я что-то не понимаю?
6. spacecraft 07.08.23 15:28 Сейчас в теме
(5) редирект не нужен. Смотрите информацию по публикации базы на стронем веб-сервере.
Для начала:
https://forum.infostart.ru/forum9/topic59284/
7. MDR_Tiger 07.08.23 15:42 Сейчас в теме
(6)
Там-то всё просто: веб-сервер и сервер 1С в одной локальной сети. Так опубликовать базу не проблема. У меня "SERVER" и "SERVER_01" не в одной локальной сети. Между ними Интернет. Ещё проблема в том, что при такой публикации в работе с базой весь трафик поползёт через компьютер "SERVER", а мне не хотелось бы, чтобы он был. Нужно, чтобы пользователя сразу откинуло на нужный сервер, а дальше в работе с базой он бы работал напрямую с нужным сервером. Без посредников в виде компьютера "SERVER".

Поможет ли как-то NGINX ? Или это будет то же самое, что и Apache, только с другим названием ?
9. spacecraft 07.08.23 15:50 Сейчас в теме
(7) тут не важно на чем сам веб-сервер. Тонкий клиент не работает с редиректом.
Как вариант: написать какой-либо сервис, который будет обрабатывать редирект и запускать тонкий клиент 1С программно (или из командной строки).
В чем сложность сразу в настройках запуска указывать нужный итоговый путь?
10. MDR_Tiger 07.08.23 15:59 Сейчас в теме
(9)
В чем сложность сразу в настройках запуска указывать нужный итоговый путь?


Не столько сложность, сколько особенность. Пользователю не обязательно знать, что база переехала физически на другой сервер. Пользователей много, да и каждому объяснять, что база переехала - это что-то с чем-то.


(9)
Тонкий клиент не работает с редиректом

Грустно.
8. Timur.V 81 07.08.23 15:45 Сейчас в теме
(1)
SERVER - главный сервер, куда поступают запросы пользователей для подключения к базам

Подробно, что за строка прилетает от пользователя на сервер?
11. MDR_Tiger 07.08.23 16:07 Сейчас в теме
(8)
"POST /db01/e1cib/login?vl=ru_RU&version=8.3.22.1923&.........ещё много всего.... HTTP/1.1" 301 633
12. Timur.V 81 07.08.23 16:15 Сейчас в теме
15. Baser 7 22.11.24 04:10 Сейчас в теме
(1) Получилось что-нибудь?
16. Baser 7 22.11.24 11:42 Сейчас в теме
я немного другую задачу решал (несколько апачей для разных баз). Помогло прокси

включил модуль a2enmod proxy_http

а в /etc/apache2/apache2.conf прописал

ProxyPass /buh http://192.168.0.101:81/buh
<Location /buh/>
ProxyPassReverse /buh/
Order deny,allow
Allow from all
</Location>

В браузере видно, что другой порт открывается, а в ТК незаметно.

(7)не в одной локальной сети. Между ними Интернет.
поднимал впн - и все в одной сети.
13. MDR_Tiger 07.08.23 18:43 Сейчас в теме
(12)
Чёт у меня глухо с этими выражениями... Может, направите меня? Только не совсем далеко. :-)
Кусок файла настроек Apache:

<IfModule rewrite_module>
RewriteEngine On
RewriteCond "%{REQUEST_URI}" "^/db01" [NC]
RewriteRule "^/db01(.*)" "http://SERVER_01/db01/$1"
</IfModule>

Тоже работает в браузере, но не работает через тонкого клиента. В логах возвращается код 302 (тоже редирект по сути), с которым тонкий клиент не хочет работать.
14. roma03v1 01.08.24 13:00 Сейчас в теме
На случай, если кто-то столкнётся с данной проблемой:

Для этого используете Reverse Proxies/Gateways
Справка: https://httpd.apache.org/docs/current/mod/mod_proxy.html
TLDR: запрос идёт так: Клиент > Сервер > Бэкэнд сервер

Пример для https:
На основном сервере размещаете след. записи в файл httpd.conf (или где вы там у себя добавляете Virtual Hosts)

<VirtualHost *:443>
ServerName mainserver.ru
...
SSLEngine On
SSLProxyEngine on
ProxyPass "/base" "https://backendserver.ru/base"
ProxyPassReverse "/base" "https://backendserver.ru/base"
</VirtualHost>

Для http убираете SSLProxyEngine on.

Соответственно на стороне backend сервера должен быть настроен Apache + 1С.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот