From c94995f5d032731a77717cd1d80b41c91afb2603 Mon Sep 17 00:00:00 2001 From: Dmitry Fofanov Date: Fri, 8 May 2026 15:05:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83?= =?UTF-8?q?=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F=201=D0=A1:=D0=9F=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=BF=D1=80=D0=B8=D1=8F=D1=82=D0=B8=D0=B5=20=D0=B8=20?= =?UTF-8?q?=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B0=20Apache?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=BD=D0=BE=D0=B9=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B?= =?UTF-8?q?=20=D1=81=20=D0=B2=D0=B5=D0=B1-=D0=BF=D1=83=D0=B1=D0=BB=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=D1=86=D0=B8=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web-1c/data/vrd/default.vrd | 29 +++++++++++++++++---------- web-1c/docker-compose.yml | 27 +++++++++++++++++-------- web-1c/docker/default.vrd | 26 ++++++++++++++---------- web-1c/docker/httpd.conf | 40 ++++++++++++++++++++++++++++++------- 4 files changed, 87 insertions(+), 35 deletions(-) diff --git a/web-1c/data/vrd/default.vrd b/web-1c/data/vrd/default.vrd index 22080cc..76226d5 100644 --- a/web-1c/data/vrd/default.vrd +++ b/web-1c/data/vrd/default.vrd @@ -1,10 +1,19 @@ - - - - - + + + + + + diff --git a/web-1c/docker-compose.yml b/web-1c/docker-compose.yml index ffc3819..e8465e5 100644 --- a/web-1c/docker-compose.yml +++ b/web-1c/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.7" - services: app_proxy: environment: @@ -16,9 +14,22 @@ services: stop_grace_period: 1m volumes: - ${APP_DATA_DIR}/data/vrd/default.vrd:/usr/local/apache2/htdocs/BuhBase/default.vrd:ro - # Сервер 1С:Предприятие может отвечать клиенту DNS-именем рабочего процесса - # (например, srv-1c), которое не разрешается из контейнера, даже если в default.vrd - # стоит IP. Прописываем соответствие имя → IP для всех узлов кластера 1С. - # Поправьте список под вашу сеть. - extra_hosts: - - "srv-1c:192.168.10.195" + + # ────────────────────────────────────────────────────────────────── + # При необходимости разкомментируйте и пропишите соответствия имя → IP + # для УЗЛОВ КЛАСТЕРА 1С (рабочего процесса rphost, агента ragent и т.п.). + # + # Это нужно, когда сервер 1С отвечает клиенту по DNS-имени + # (например, "srv-1c"), которое не разрешается из контейнера — + # даже если в default.vrd указан IP. Без таких записей клиент 1С + # упадёт с ошибкой "Temporary failure in name resolution". + # + # Имена должны совпадать с теми, что 1С возвращает в ответах + # (часто это hostname машины с сервером 1С). IP укажите свой. + # + # Этот файл редактируется ПОСЛЕ установки приложения, в каталоге + # ~/dfwebos-data/app-data/web-1c/docker-compose.yml — там же + # лежит данная подсказка. + # ────────────────────────────────────────────────────────────────── + # extra_hosts: + # - "srv-1c:192.0.2.10" diff --git a/web-1c/docker/default.vrd b/web-1c/docker/default.vrd index 22080cc..f0f294d 100644 --- a/web-1c/docker/default.vrd +++ b/web-1c/docker/default.vrd @@ -1,10 +1,16 @@ - - - - - + + + + + + diff --git a/web-1c/docker/httpd.conf b/web-1c/docker/httpd.conf index b8f97b8..bc4b0de 100644 --- a/web-1c/docker/httpd.conf +++ b/web-1c/docker/httpd.conf @@ -192,7 +192,7 @@ LoadModule dir_module modules/mod_dir.so #LoadModule speling_module modules/mod_speling.so #LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so -#LoadModule rewrite_module modules/mod_rewrite.so +LoadModule rewrite_module modules/mod_rewrite.so # @@ -560,8 +560,36 @@ SSLRandomSeed connect builtin LoadModule _1cws_module /opt/1cv8/x86_64/8.3.23.1912/wsap24.so -# 1c publication -Alias "/BuhBase" "/usr/local/apache2/htdocs/BuhBase/" +# ─────────────────────────────────────────────────────────────────────────── +# 1С web-публикация под префиксом DFWebOS-прокси `/app-web-1c/BuhBase/`. +# +# Архитектура запроса: +# браузер → /app-web-1c/BuhBase/X +# DFWebOS-прокси → стрипает префикс /app-web-1c → Apache видит /BuhBase/X +# ↓ +# mod_rewrite внутренне ПРИДОБАВЛЯЕТ префикс обратно: /BuhBase/X → /app-web-1c/BuhBase/X +# ↓ +# 1С-handler по пути /app-web-1c/BuhBase/* читает default.vrd и видит совпадение +# с base="/app-web-1c/BuhBase". URL-ы, которые он генерирует в HTML/JS, тоже +# получают этот префикс — браузер их правильно проксирует обратно. +# +# Зачем такая схема: 1С-handler формирует и абсолютные пути +# из атрибута `base` в default.vrd. Если бы base="/BuhBase", все ссылки 1С +# в HTML стали бы корне-привязанными `/BuhBase/...`, в обход DFWebOS-прокси, +# и попадали бы в SPA-fallback DFWebOS (404). +# ─────────────────────────────────────────────────────────────────────────── + +# Внутренний rewrite: приклеиваем префикс /app-web-1c обратно перед 1С-handler. +# [PT] (passthrough) обязателен, чтобы Apache повторно прогнал URL через Alias/Location. + + RewriteEngine On + # Не перезаписываем то, что уже под префиксом (защита от циклов) + RewriteCond %{REQUEST_URI} !^/app-web-1c/ + RewriteRule ^/BuhBase(/.*)?$ /app-web-1c/BuhBase$1 [PT,L] + + +# 1С-handler привязан к публичному префиксу — совпадает с base в default.vrd. +Alias "/app-web-1c/BuhBase" "/usr/local/apache2/htdocs/BuhBase/" AllowOverride All Options None @@ -570,11 +598,9 @@ Alias "/BuhBase" "/usr/local/apache2/htdocs/BuhBase/" ManagedApplicationDescriptor "/usr/local/apache2/htdocs/BuhBase/default.vrd" -# Перехватываем ВСЕ запросы под /BuhBase (включая /BuhBase/ru_RU/BuhBase/?... +# Location перехватывает ВСЕ подпути (включая /app-web-1c/BuhBase/ru_RU/BuhBase/?... # которые 1С генерирует для внешних ссылок и перезапуска клиента). -# Location работает по URL, а не по файловой системе — поэтому не возвращает 404 -# на несуществующие подпути, а отдаёт всё в 1c-application handler. - + SetHandler 1c-application ManagedApplicationDescriptor "/usr/local/apache2/htdocs/BuhBase/default.vrd"