Веб-сервер с публикацией 1С не отвечает или работает с ошибками: порядок диагностики
Содержание
Проверить веб-сервер 1С быстрее всего так: откройте в браузере адрес публикации вида http://имя-сервера/имя-публикации/ru_RU/ и выполните на сервере httpd -M (или apachectl -M в Linux). Если страница входа 1С открылась, а в списке модулей Apache есть _1cws_module, веб-сервер и модуль расширения 1С работают. Дальше остаются связь с кластером, логи и безопасность.
Порядок ниже одинаков для платформы 8.3 и любой конфигурации: Бухгалтерии, ЗУП, УТ, ERP. Веб-сервер ничего не знает о конфигурации, он только передаёт запросы серверу 1С или файловой базе. Поэтому проверку ведут снизу вверх: сеть → веб-сервер → модуль 1С → кластер → база.
1. Базовая проверка: отвечает ли веб-сервер и публикация
Начните с простого. Цель — понять, на каком уровне обрывается цепочка.
Порт и сам веб-сервер
- На сервере проверьте, что служба запущена. В Windows это служба
Apache2.4илиW3SVC(IIS), в Linux —systemctl status apache2илиsystemctl status httpd. - Убедитесь, что порт слушается:
netstat -ano | findstr :80в Windows,ss -tlnp | grep :80в Linux. - С клиентского компьютера проверьте доступ по сети:
Test-NetConnection имя-сервера -Port 80в PowerShell. - Откройте в браузере корень сервера
http://имя-сервера/. Стартовая страница Apache или IIS значит, что сам веб-сервер жив.
Адреса публикации
Одна публикация отвечает по нескольким адресам. Каждый проверяет свою часть:
| Адрес | Что проверяет | Что должно вернуться |
|---|---|---|
/имя-публикации/ru_RU/ | Веб-клиент | Окно входа 1С |
/имя-публикации/ws/ИмяСервиса?wsdl | Веб-сервисы SOAP | XML-описание сервиса |
/имя-публикации/hs/корневой-URL/... | HTTP-сервисы | Ответ вашего сервиса |
/имя-публикации/odata/standard.odata/ | Стандартный интерфейс OData | XML со списком наборов |
Веб-сервисы, 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="srv-1c";Ref="buh";">
</point>
Проверьте, что имя сервера в Srvr разрешается с веб-сервера, а имя базы в Ref совпадает с именем в кластере, а не с представлением в списке баз. Для файловой базы там будет File="D:\Bases\buh";.
IIS
В IIS публикация живёт как приложение сайта. Проверьте три места в диспетчере IIS:
- Сопоставления обработчиков у приложения: обработчик должен вести на
wsisapi.dllиз каталогаbinтекущей версии платформы. - Ограничения ISAPI и CGI на уровне сервера: этот модуль должен быть разрешён.
- Пул приложений: параметр «Разрешены 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.
Порядок проверки с машины, где стоит веб-сервер:
Test-NetConnection srv-1c -Port 1540и то же для1541.- Проверка одного-двух портов из диапазона рабочих процессов.
- Разрешение имени:
nslookup srv-1c. Сервер 1С должен находиться по тому имени, которое записано вdefault.vrd. - Версия платформы: модуль на веб-сервере и сервер 1С должны быть одной версии. Иначе появится сообщение о несоответствии версий клиента и сервера.
Если веб-сервер и сервер 1С на разных машинах, на веб-сервере нужна та же версия платформы, что и на кластере. После обновления сервера 1С обновляют и модуль на веб-сервере, затем перепубликуют базу.
Для файловой базы связь проще: учётная запись, от которой работает Apache или пул IIS, должна иметь права на чтение и запись в каталог базы. Служба Apache по умолчанию работает от «Локальной системы», и сетевой папки на другом компьютере она не видит.
4. Где смотреть логи веб-сервера и 1С
Логи отвечают на вопрос «на чьей стороне ошибка».
| Журнал | Где лежит | Что в нём искать |
|---|---|---|
error.log Apache | logs в каталоге Apache, в Linux /var/log/apache2/ или /var/log/httpd/ | Ошибки загрузки модуля, отказ в доступе к каталогу |
access.log Apache | там же | Код ответа и время обработки каждого запроса |
| Журналы IIS | C:\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С, открытая в интернет, — частая точка утечки. Проверьте пункты по списку.
Пояснения к самым опасным пунктам:
- 🔒 Логин в
default.vrd. Публикацию можно настроить так, что она входит в базу под заранее заданным пользователем. Тогда любой, кто знает адрес, попадает в базу без пароля. Для внешних интеграций создавайте отдельного пользователя с минимальными правами. - 🔒 Пустой пароль. Через веб-клиент к базе подбирают имена пользователей из списка. Пользователь без пароля открывает базу целиком.
- 🔒 HTTP без шифрования. При базовой аутентификации логин и пароль идут по сети почти открытым текстом. Сертификат Let’s Encrypt или корпоративный бесплатно закрывает вопрос.
- 🔒 Лишние сервисы. Включённый, но забытый OData отдаёт данные справочников и документов тому, у кого есть учётная запись с правами.
Скрыть версию Apache можно двумя директивами в httpd.conf: ServerTokens Prod и ServerSignature Off.
Частые вопросы
Можно ли опубликовать базу 1С на Nginx без Apache и IIS?
Нужна ли лицензия 1С для работы через веб-клиент?
Нужно ли перепубликовывать базу после обновления конфигурации?
Как понять, какой httpd.conf читает Apache?
httpd -V и посмотрите строки HTTPD_ROOT и SERVER_CONFIG_FILE. В Windows путь также виден в параметрах запуска службы.