Веб-клиент 1С тормозит: что подкрутить в Apache, IIS и сети
Содержание
Чтобы ускорить работу 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-разрядные приложения | False | True только для 32-разрядного модуля 1С; разрядность должна совпадать |
| Тайм-аут простоя (минуты) | 20 | 0 — пул не засыпает, первый вход утром без задержки |
| Регулярный интервал времени (перезапуск) | 1740 минут | 0, а перезапуск — по расписанию ночью |
| Длина очереди | 1000 | Обычно хватает; растите, если в логах отказы 503 |
| Версия среды CLR .NET | v4.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, а перезапуск службы веб-сервера делайте вне рабочего времени: при перезапуске сеансы веб-клиента оборвутся, пользователи потеряют несохранённые данные в формах.