Веб-сервер с публикацией 1С не отвечает или работает с ошибками: порядок диагностики

· 10 мин

Содержание

Проверить веб-сервер 1С быстрее всего так: откройте в браузере адрес публикации вида http://имя-сервера/имя-публикации/ru_RU/ и выполните на сервере httpd -M (или apachectl -M в Linux). Если страница входа 1С открылась, а в списке модулей Apache есть _1cws_module, веб-сервер и модуль расширения 1С работают. Дальше остаются связь с кластером, логи и безопасность.

Порядок ниже одинаков для платформы 8.3 и любой конфигурации: Бухгалтерии, ЗУП, УТ, ERP. Веб-сервер ничего не знает о конфигурации, он только передаёт запросы серверу 1С или файловой базе. Поэтому проверку ведут снизу вверх: сеть → веб-сервер → модуль 1С → кластер → база.

1. Базовая проверка: отвечает ли веб-сервер и публикация

Начните с простого. Цель — понять, на каком уровне обрывается цепочка.

Порт и сам веб-сервер

  1. На сервере проверьте, что служба запущена. В Windows это служба Apache2.4 или W3SVC (IIS), в Linux — systemctl status apache2 или systemctl status httpd.
  2. Убедитесь, что порт слушается: netstat -ano | findstr :80 в Windows, ss -tlnp | grep :80 в Linux.
  3. С клиентского компьютера проверьте доступ по сети: Test-NetConnection имя-сервера -Port 80 в PowerShell.
  4. Откройте в браузере корень сервера http://имя-сервера/. Стартовая страница Apache или IIS значит, что сам веб-сервер жив.

Адреса публикации

Одна публикация отвечает по нескольким адресам. Каждый проверяет свою часть:

АдресЧто проверяетЧто должно вернуться
/имя-публикации/ru_RU/Веб-клиентОкно входа 1С
/имя-публикации/ws/ИмяСервиса?wsdlВеб-сервисы SOAPXML-описание сервиса
/имя-публикации/hs/корневой-URL/...HTTP-сервисыОтвет вашего сервиса
/имя-публикации/odata/standard.odata/Стандартный интерфейс ODataXML со списком наборов

Веб-сервисы, HTTP-сервисы и OData отвечают только если их включили при публикации. OData вдобавок требует, чтобы в базе был задан состав доступных объектов. Пустой ответ OData при включённой публикации — не ошибка веб-сервера.

💡 Для проверки без браузера используйте curl -I http://имя-сервера/имя-публикации/ru_RU/. Код 200 или 302 — хорошо, 401 — сработала аутентификация, 403, 404 и 500 разобраны ниже.

2. Проверка конфигурации Apache, IIS и Nginx для 1С

Публикацию обычно делают из Конфигуратора (Администрирование → Публикация на веб-сервере) или утилитой webinst. Обе вносят в настройки веб-сервера одни и те же строки. Их и проверяем.

Apache

Откройте httpd.conf и найдите блок, который добавила 1С. Он выглядит примерно так:

LoadModule _1cws_module "C:/Program Files/1cv8/8.3.24.1467/bin/wsap24.dll"

# 1c publication
Alias "/buh" "C:/inetpub/wwwroot/buh/"
<Directory "C:/inetpub/wwwroot/buh/">
    AllowOverride All
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "C:/inetpub/wwwroot/buh/default.vrd"
</Directory>

Что сверить:

  • 🔹 путь в LoadModule указывает на установленную версию платформы, а не на удалённую после обновления;
  • 🔹 разрядность модуля совпадает с разрядностью Apache: 64-битный Apache грузит модуль из 64-битной платформы;
  • 🔹 модуль подходит к версии Apache: wsap24 — для Apache 2.4, wsap22 — для 2.2;
  • 🔹 каталог из Alias существует и в нём лежит default.vrd;
  • 🔹 строка LoadModule для 1С одна, а не две для разных версий.

Синтаксис проверяется командой httpd -t в Windows или apachectl configtest в Linux. Ответ Syntax OK значит, что файл читается. Список загруженных модулей даёт httpd -M: в нём должен быть _1cws_module.

В Linux модуль называется wsap24.so и лежит в каталоге платформы, обычно /opt/1cv8/x86_64/<версия>/.

Файл default.vrd

Это описание публикации. Главное в нём — атрибут ib со строкой подключения:

<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       base="/buh"
       ib="Srvr=&quot;srv-1c&quot;;Ref=&quot;buh&quot;;">
</point>

Проверьте, что имя сервера в Srvr разрешается с веб-сервера, а имя базы в Ref совпадает с именем в кластере, а не с представлением в списке баз. Для файловой базы там будет File=&quot;D:\Bases\buh&quot;;.

IIS

В IIS публикация живёт как приложение сайта. Проверьте три места в диспетчере IIS:

  1. Сопоставления обработчиков у приложения: обработчик должен вести на wsisapi.dll из каталога bin текущей версии платформы.
  2. Ограничения ISAPI и CGI на уровне сервера: этот модуль должен быть разрешён.
  3. Пул приложений: параметр «Разрешены 32-разрядные приложения» включают, только если установлена 32-битная платформа.

Nginx

Модуля 1С для Nginx нет. Nginx ставят перед Apache или IIS как обратный прокси: он принимает HTTPS и пересылает запросы на внутренний веб-сервер с публикацией. Значит, проверка двойная: сначала публикация открывается напрямую на Apache, потом — через Nginx.

location /buh/ {
    proxy_pass http://127.0.0.1:8080/buh/;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_read_timeout 300s;
}

Типичная поломка здесь — короткий proxy_read_timeout: длинный отчёт в веб-клиенте обрывается с ошибкой 504.

3. Связь веб-сервера с сервером 1С

Окно входа открылось, а после ввода пароля ошибка подключения к базе? Значит, веб-сервер работает, а до кластера запрос не доходит.

Модуль расширения на веб-сервере — это клиент 1С. Он ходит к кластеру так же, как тонкий клиент: к агенту сервера (порт 1540), к менеджеру кластера (1541) и к рабочим процессам. Диапазон портов рабочих процессов задаётся в свойствах рабочего сервера, по умолчанию это 1560-1591.

Порядок проверки с машины, где стоит веб-сервер:

  1. Test-NetConnection srv-1c -Port 1540 и то же для 1541.
  2. Проверка одного-двух портов из диапазона рабочих процессов.
  3. Разрешение имени: nslookup srv-1c. Сервер 1С должен находиться по тому имени, которое записано в default.vrd.
  4. Версия платформы: модуль на веб-сервере и сервер 1С должны быть одной версии. Иначе появится сообщение о несоответствии версий клиента и сервера.

Если веб-сервер и сервер 1С на разных машинах, на веб-сервере нужна та же версия платформы, что и на кластере. После обновления сервера 1С обновляют и модуль на веб-сервере, затем перепубликуют базу.

Для файловой базы связь проще: учётная запись, от которой работает Apache или пул IIS, должна иметь права на чтение и запись в каталог базы. Служба Apache по умолчанию работает от «Локальной системы», и сетевой папки на другом компьютере она не видит.

4. Где смотреть логи веб-сервера и 1С

Логи отвечают на вопрос «на чьей стороне ошибка».

ЖурналГде лежитЧто в нём искать
error.log Apachelogs в каталоге Apache, в Linux /var/log/apache2/ или /var/log/httpd/Ошибки загрузки модуля, отказ в доступе к каталогу
access.log Apacheтам жеКод ответа и время обработки каждого запроса
Журналы IISC:\inetpub\logs\LogFiles\Коды ответа с подкодами, например 500.0
Журнал событий Windowsраздел «Приложение»Падение службы Apache, ошибки пула IIS
Журнал регистрации базыоткрывается из 1СВходы через веб-клиент, ошибки на стороне конфигурации
Технологический журналкаталог из logcfg.xmlИсключения и долгие вызовы на сервере 1С

Читать начинают с error.log сразу после воспроизведения ошибки. Удобно смотреть последние строки: tail -n 50 /var/log/apache2/error.log или в PowerShell Get-Content error.log -Tail 50.

Технологический журнал включают на время разбора. Он быстро растёт, поэтому задавайте в logcfg.xml срок хранения и отбор по событиям, например только EXCP.

5. Производительность и нагрузочное тестирование

Медленная работа в веб-клиенте почти всегда упирается в сервер 1С, а не в Apache. Чтобы это доказать, сравните время.

Быстрый замер

curl -o /dev/null -s -w "%{http_code} %{time_total}\n" http://web-1c/buh/ru_RU/

Если стартовая страница отдаётся за доли секунды, а открытие формы в базе длится секунды, искать надо на сервере 1С: блокировки, тяжёлые запросы, нехватка памяти рабочих процессов.

Нагрузка

  • 🔹 Утилита ab из комплекта Apache: ab -n 500 -c 20 http://web-1c/buh/ru_RU/. Она проверяет только отдачу страниц веб-сервером, а не работу пользователей в базе.
  • 🔹 Реальную нагрузку на базу дают сценарии пользователей. Для этого есть «Тест-центр» из Корпоративного инструментального пакета 1С; на него опираются при приёмке крупных внедрений.
  • 🔹 Нагрузку в рабочее время не запускайте: она отразится на живых пользователях.

Настройки Apache под много пользователей

В Windows Apache работает с одним дочерним процессом и пулом потоков. Число потоков задаёт ThreadsPerChild в блоке mpm_winnt_module. Если пользователей больше, чем потоков, новые запросы встают в очередь. Значение подбирают под число одновременных сеансов веб-клиента с запасом.

6. Типичные ошибки веб-сервера 1С и что с ними делать

Диагностика: выберите симптом

Перезапуск Apache или пула IIS обрывает сеансы всех, кто работает через веб-клиент и HTTP-сервисы. Внешние системы, которые шлют запросы в базу, получат ошибку. Делайте это вне рабочих часов или предупредите пользователей.

Отдельный частый случай — обновили платформу на сервере 1С, но не на веб-сервере. Пока версии не совпадут, веб-клиент работать не будет. Поставьте ту же версию платформы с компонентом «Модули расширения веб-сервера» и перепубликуйте базу: публикация обновит путь в LoadModule.

7. Скрипты и мониторинг веб-сервера 1С

Ручная проверка раз в день не спасает от ночного падения. Простейший автоматический контроль — запрос к публикации по расписанию.

PowerShell для Windows

$url = "http://web-1c/buh/ru_RU/"
try {
    $r = Invoke-WebRequest -Uri $url -UseBasicParsing -TimeoutSec 15
    "$(Get-Date -Format s) OK $($r.StatusCode)" | Out-File C:\Scripts\web1c.log -Append
} catch {
    "$(Get-Date -Format s) FAIL $($_.Exception.Message)" | Out-File C:\Scripts\web1c.log -Append
}

Запускайте его из «Планировщика заданий» каждые 5 минут. Вместо записи в файл можно отправлять письмо или сообщение в мессенджер.

Bash для Linux

#!/bin/bash
URL="http://web-1c/buh/ru_RU/"
CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 15 "$URL")
if [ "$CODE" != "200" ] && [ "$CODE" != "302" ]; then
    echo "$(date '+%F %T') web-1c FAIL code=$CODE" >> /var/log/web1c-check.log
fi

Строка для crontab -e: */5 * * * * /usr/local/bin/web1c-check.sh.

Что ещё стоит мониторить

  • 📈 код ответа и время отклика публикации — HTTP-проверкой в Zabbix или аналоге;
  • 📈 состояние службы Apache или пула IIS;
  • 📈 место на диске с логами: access.log без ротации растёт годами;
  • 📈 ответ одного лёгкого HTTP-сервиса базы. Так вы проверяете всю цепочку до базы, а не только веб-сервер.

Последний пункт самый полезный. Сделайте в конфигурации расширением HTTP-сервис, который возвращает OK, и опрашивайте его. Ответ придёт только если работают и веб-сервер, и модуль, и кластер, и база.

8. Проверка безопасности веб-сервера 1С

Публикация 1С, открытая в интернет, — частая точка утечки. Проверьте пункты по списку.

Безопасность публикации 1С
Выполнено: 0 / 8

Пояснения к самым опасным пунктам:

  • 🔒 Логин в default.vrd. Публикацию можно настроить так, что она входит в базу под заранее заданным пользователем. Тогда любой, кто знает адрес, попадает в базу без пароля. Для внешних интеграций создавайте отдельного пользователя с минимальными правами.
  • 🔒 Пустой пароль. Через веб-клиент к базе подбирают имена пользователей из списка. Пользователь без пароля открывает базу целиком.
  • 🔒 HTTP без шифрования. При базовой аутентификации логин и пароль идут по сети почти открытым текстом. Сертификат Let’s Encrypt или корпоративный бесплатно закрывает вопрос.
  • 🔒 Лишние сервисы. Включённый, но забытый OData отдаёт данные справочников и документов тому, у кого есть учётная запись с правами.

Скрыть версию Apache можно двумя директивами в httpd.conf: ServerTokens Prod и ServerSignature Off.

Частые вопросы

Можно ли опубликовать базу 1С на Nginx без Apache и IIS?
Нет. Модуль расширения 1С существует для Apache и IIS. Nginx используют как обратный прокси перед ними: он принимает HTTPS и передаёт запросы дальше.
Нужна ли лицензия 1С для работы через веб-клиент?
Да. Сеанс веб-клиента занимает клиентскую лицензию так же, как тонкий клиент. Проверьте, хватает ли лицензий на число одновременных пользователей.
Нужно ли перепубликовывать базу после обновления конфигурации?
Нет. Обновление конфигурации публикацию не затрагивает. Перепубликация нужна после обновления платформы, смены имени базы или сервера и при включении новых сервисов.
Как понять, какой httpd.conf читает Apache?
Выполните httpd -V и посмотрите строки HTTPD_ROOT и SERVER_CONFIG_FILE. В Windows путь также виден в параметрах запуска службы.
Почему веб-клиент работает в одном браузере и не работает в другом?
Чаще всего мешают блокировщик всплывающих окон или устаревший браузер. Разрешите всплывающие окна для адреса публикации и обновите браузер.