Веб-клиент 1С тормозит: что подкрутить в Apache, IIS и сети

· 10 мин

Содержание

Чтобы ускорить работу 1С через веб-сервер, в первую очередь поставьте веб-сервер в одну локальную сеть с сервером 1С, увеличьте число потоков Apache (ThreadsPerChild) или отключите простой и дневную перезагрузку пула в IIS, включите keep-alive и сжатие текстовых ответов. Эти четыре настройки дают основной выигрыш. Остальное — тонкая настройка и поиск конкретного узкого места по логам.

Веб-сервер в схеме 1С — посредник. Браузер или тонкий клиент шлёт HTTP-запросы, модуль расширения веб-сервера (wsap24.dll для Apache 2.4, wsisapi.dll для IIS) превращает их в вызовы сервера 1С или файловой базы. Поэтому тормозить может каждое звено: браузер, канал до веб-сервера, сам веб-сервер, канал до сервера 1С и рабочие процессы 1С. Оптимизация веб-сервера помогает, только если узкое место действительно в нём.

С чего начать: выбор веб-сервера и базовая публикация

Платформа 1С:Предприятие 8.3 работает с Apache 2.2/2.4 и IIS. Для новой установки на Windows выбирайте Apache 2.4 или IIS, на Linux — Apache 2.4. Принципиальной разницы в скорости между ними нет, разница в удобстве управления.

Веб-серверКогда выбиратьНа что обратить внимание
Apache 2.4 (Windows)Нужна простая публикация, один конфиг httpd.confЧисло потоков задаётся вручную, по умолчанию его мало для десятков пользователей
IIS (Windows Server)Уже есть инфраструктура IIS, нужна доменная аутентификацияПул приложений по умолчанию перезапускается и засыпает
Apache 2.4 (Linux)Сервер 1С на Linux, нужна экономия ресурсовМодуль wsap24.so той же разрядности и версии, что и платформа

Публикацию делают из Конфигуратора: Администрирование → Публикация на веб-сервере. На сервере без графического интерфейса или для скриптов есть утилита webinst из папки bin платформы:

webinst -publish -apache24 -wsdir buh -dir "C:\inetpub\1c\buh" -connstr "Srvr=srv1c;Ref=buh;" -confpath "C:\Apache24\conf\httpd.conf"

После публикации в httpd.conf появится строка загрузки модуля и блок для каталога:

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

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

Отключите всё, что не используете

Файл default.vrd в каталоге публикации описывает, что именно опубликовано: веб-клиент, веб-сервисы, HTTP-сервисы, OData. Каждый лишний сервис — это лишние обработчики и лишние точки входа.

  • 🌐 Нужен только веб-клиент — снимите в окне публикации флажки публикации веб-сервисов и HTTP-сервисов по умолчанию.
  • 🔌 Нужен только обмен через HTTP-сервис — не публикуйте тонкий и веб-клиент на этот же адрес.
  • 📁 Разные задачи — разные публикации. Обмены с сайтом не должны делить потоки с бухгалтерами.

Для веб-сервисов в default.vrd есть атрибут reuseSessions у точки публикации. Значение autouse или use разрешает повторно использовать сеансы, а не открывать новый на каждый вызов. Для частых коротких вызовов это заметно снижает задержку. Параметры пула сеансов описаны в документации платформы к файлу default.vrd.

Сжатие, keep-alive и кеширование ответов

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

Keep-alive в Apache

Без keep-alive браузер открывает новое TCP-соединение (а при HTTPS — ещё и заново согласует шифрование) почти на каждый запрос. Проверьте в httpd.conf:

KeepAlive On
MaxKeepAliveRequests 500
KeepAliveTimeout 15
Timeout 300
  • KeepAliveTimeout в 5–15 секунд — разумный диапазон. Больше — потоки будут простаивать на пустых соединениях.
  • Timeout поднимают, если длинные отчёты и обработки обрываются по таймауту веб-сервера.

Сжатие текстовых ответов

Модуль mod_deflate сжимает HTML, CSS, JavaScript, XML и JSON. Для веб-клиента на медленном канале это ускоряет первую загрузку интерфейса в разы.

LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml
  AddOutputFilterByType DEFLATE application/javascript application/json application/xml
  DeflateCompressionLevel 5
</IfModule>

В IIS сжатие включается в Диспетчер служб IIS → сервер → Сжатие: отдельно статическое и динамическое. Компонент «Сжатие динамического содержимого» сначала доставьте через роли сервера.

Уровень сжатия выше 5–6 почти не уменьшает размер, но заметно грузит процессор. Картинки, PDF и архивы не сжимайте повторно — выигрыша нет.

Что кешировать нельзя

Ответы, которые отдаёт модуль 1С, — это данные конкретного сеанса пользователя. Не включайте серверный кеш (mod_cache, кеш вывода IIS) на весь каталог публикации — пользователи начнут получать чужие данные или устаревшие формы. Кеширование статических ресурсов веб-клиента платформа настраивает сама, поверх неё ничего добавлять не нужно.

Потоки Apache и пул приложений IIS

Это главный узел, где веб-сервер становится узким местом при росте числа пользователей.

Apache на Windows: ThreadsPerChild

На Windows Apache работает с модулем mpm_winnt: один процесс и фиксированное число потоков. Каждый активный запрос занимает поток. Когда потоки кончаются, новые запросы встают в очередь, и пользователи видят «часики».

<IfModule mpm_winnt_module>
  ThreadsPerChild 250
  MaxConnectionsPerChild 0
</IfModule>

Ориентир: 3–5 потоков на одновременно работающего пользователя веб-клиента. Для 50 пользователей — 150–250 потоков. Значение MaxConnectionsPerChild 0 отключает перезапуск процесса по счётчику соединений, который на Windows рвёт работу всех пользователей сразу.

Apache на Linux

На Linux используются многопроцессные и многопоточные MPM (prefork, worker, event). Потоковые варианты расходуют меньше памяти. Выбранный MPM проверьте на тестовой публикации: модуль 1С грузится в каждый процесс Apache, и его поведение при смене MPM надо подтвердить нагрузкой, а не теорией. Лимит одновременных запросов задаёт MaxRequestWorkers.

Пул приложений IIS

Настройки пула открываются в Диспетчер служб IIS → Пулы приложений → ваш пул → Дополнительные параметры. Значения по умолчанию рассчитаны на сайты, а не на учётную систему:

ПараметрПо умолчаниюЧто поставить для 1С
Включить 32-разрядные приложенияFalseTrue только для 32-разрядного модуля 1С; разрядность должна совпадать
Тайм-аут простоя (минуты)200 — пул не засыпает, первый вход утром без задержки
Регулярный интервал времени (перезапуск)1740 минут0, а перезапуск — по расписанию ночью
Длина очереди1000Обычно хватает; растите, если в логах отказы 503
Версия среды CLR .NETv4.0«Без управляемого кода» — модулю 1С .NET не нужен

Перезапуск пула обрывает всех пользователей веб-клиента, у которых открыт сеанс. Делайте его ночью или в окно регламента, а не днём по таймеру по умолчанию.

Память

Модуль 1С держит в процессе веб-сервера соединения с сервером 1С. Если процесс httpd.exe или w3wp.exe растёт в памяти без остановки, это не повод ставить частый перезапуск. Сначала обновите платформу до актуального релиза вашей ветки и проверьте, не утекает ли память на конкретной операции. Перезапуск по расписанию раз в сутки ночью — допустимая страховка.

Сеть между браузером, веб-сервером и сервером 1С

Для веб-клиента важнее задержка, чем ширина канала. Одна операция в форме — это десятки обращений к серверу. При пинге 50 мс и 30 обращениях только на ожидание уходит 1,5 секунды.

  • 🏢 Веб-сервер рядом с сервером 1С. Ставьте их в одну локальную сеть, желательно в один сегмент. Канал «веб-сервер ↔ сервер 1С» должен давать пинг меньше 1 мс.
  • 🌍 Удалённым пользователям — ближний вход. Если офисы далеко, задержку до веб-сервера убирают только географией, настройками её не вылечить.
  • 🔒 HTTP/2. На Apache — модуль mod_http2 с директивой Protocols h2 http/1.1, в IIS на Windows Server 2016 и новее HTTP/2 работает по HTTPS без отдельной настройки. Множество мелких запросов идут в одном соединении.
  • 📶 Порты до сервера 1С. Веб-сервер обращается к агенту (1540), менеджеру кластера (1541) и рабочим процессам из диапазона, заданного в свойствах рабочего сервера (по умолчанию 1560–1591). Межсетевой экран на этом пути с глубокой проверкой пакетов добавляет задержку на каждое обращение.

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

Загрузка больших файлов

Если вложения или загрузка выписок обрываются, проверьте ограничения на размер запроса. В IIS лимит по умолчанию около 30 МБ задаётся параметром maxAllowedContentLength в разделе фильтрации запросов. В Apache — директива LimitRequestBody. Это не скорость в чистом виде, но пользователи воспринимают такие обрывы как «1С тормозит и падает».

Поиск узких мест по логам

Прежде чем крутить параметры, выясните, где теряется время. Здесь работают три инструмента.

Время ответа в журнале Apache

Добавьте в формат журнала %D — время обработки запроса в микросекундах:

LogFormat "%h %t \"%r\" %>s %b %D" timing
CustomLog "logs/access_timing.log" timing

Отсортируйте журнал по последнему полю. Если медленные запросы распределены равномерно — проблема в сервере 1С или базе. Если все запросы разом становятся медленными в определённые минуты — ищите нехватку потоков или ресурсов веб-сервера.

Модуль mod_status со страницей server-status показывает, сколько потоков занято прямо сейчас. Если почти все заняты — увеличивайте ThreadsPerChild. Закройте эту страницу от внешнего доступа.

Поле time-taken в IIS

В IIS включите в журнале поле time-taken: Сайт → Ведение журнала → Выбрать поля. Время там в миллисекундах и включает отправку ответа клиенту. Большое значение при маленьком ответе указывает на сервер 1С, при большом ответе — на медленный канал.

Браузер и технологический журнал 1С

Вкладка «Сеть» в инструментах разработчика браузера (F12) показывает, сжаты ли ответы (заголовок Content-Encoding) и какие запросы ждут дольше всего. Технологический журнал 1С (файл logcfg.xml) покажет длительные вызовы на стороне сервера 1С. Если там вызов длится 3 секунды — веб-сервер ни при чём, оптимизировать надо запрос или код конфигурации.

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

Защита, которая не тормозит

Безопасность влияет на скорость в обе стороны. Неудачно настроенная защита добавляет задержку, а её отсутствие открывает дорогу перебору паролей и ботам, которые съедают потоки.

  • 🔐 HTTPS обязателен для публикации в интернет. Используйте TLS 1.2 и 1.3, отключите старые протоколы. Современные шифры на процессорах с AES-NI почти не нагружают сервер.
  • 🔁 Обратный прокси. Частая схема: nginx на внешнем адресе принимает HTTPS, сжимает ответы и передаёт запросы на внутренний Apache с модулем 1С. Шифрование и медленные клиенты ложатся на nginx, потоки Apache не простаивают.
  • 🚫 Ограничение доступа по адресам. Если сотрудники работают из известных офисов или через VPN, закройте публикацию для остальных. Сканеры и боты перестанут занимать потоки.
  • 🛡️ Антивирус. Проверка «на лету» каждого обращения к каталогу публикации и временным файлам веб-сервера замедляет ответы. Добавьте в исключения каталог публикации, каталог журналов веб-сервера и каталог модулей платформы — по согласованию с ответственным за безопасность.
  • 📝 Веб-фильтры вроде mod_security с полным набором правил проверяют тело каждого запроса. Для каталога 1С ограничьте набор правил или включите фильтр только на внешнем прокси.

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

Перед изменением конфигов сохраните копию httpd.conf или экспорт настроек IIS, а перезапуск службы веб-сервера делайте вне рабочего времени: при перезапуске сеансы веб-клиента оборвутся, пользователи потеряют несохранённые данные в формах.

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

Что быстрее: Apache или IIS для 1С?
При правильной настройке разница несущественна. Скорость определяют число потоков, настройки пула, сеть до сервера 1С и сам сервер 1С. Выбирайте тот веб-сервер, который ваша команда умеет поддерживать.
Сколько пользователей выдержит один веб-сервер?
Для веб-сервера с 4 ядрами и 8 ГБ памяти несколько десятков пользователей веб-клиента — обычная нагрузка. Предел чаще упирается в сервер 1С и СУБД, а не в веб-сервер. Точный ответ даёт нагрузочный тест на ваших операциях.
Можно ли поставить веб-сервер на тот же компьютер, что и сервер 1С?
Можно, для небольших компаний это нормальная схема: сеть между ними исчезает. Следите, чтобы веб-сервер и рабочие процессы 1С не делили память впритык, иначе сервер начнёт использовать файл подкачки.
Поможет ли ускорить 1С через веб-сервер переход на SSD или больше памяти веб-сервера?
Сам веб-сервер почти не работает с диском, ему важны процессор и память под потоки. Диск и память нужнее серверу 1С и СУБД. Добавляйте ресурсы туда, где по журналам видно узкое место.
Почему веб-клиент медленнее тонкого клиента на той же базе?
Браузер исполняет интерфейс на JavaScript, а каждое обращение идёт через HTTP и модуль веб-сервера. Тонкий клиент с прямым подключением к серверу 1С этих звеньев не имеет. В локальной сети используйте тонкий клиент, веб-клиент — для удалённой работы.