При переходе на открытое программное обеспечение многие системные администраторы сталкиваются с неприятной ситуацией: сервер 1С развернут на мощном железе под управлением Windows, но при попытке опубликовать базу на веб-сервере Apache под Linux пользователи начинают жаловаться на значительные задержки («тормоза»). При этом аналогичная публикация на Windows-версии Apache работает молниеносно. В этой статье мы подробно разберем, почему возникает такая разница в производительности, и как правильно настроить связку 1С + Linux + Apache для достижения максимального быстродействия. Если вы работаете с файловой базой данных, для обхода ограничений однопоточности можно применить скрипт для запуска нескольких экземпляров веб-сервера.
Основная причина медленной работы 1С на Linux заключается в способе обработки запросов веб-сервером Apache. В операционных системах семейства Linux Apache может работать в разных режимах, которые называются MPM (Multi-Processing Modules). Рассмотрим основные из них, чтобы понять суть проблемы.
wsap24.so) является многопоточным и достаточно «тяжелым», инициализация всего контекста 1С внутри каждого нового процесса потребляет колоссальное количество ресурсов и времени. Именно это вызывает те самые «тормоза» при каждом действии пользователя.Проанализируем ситуацию: если ваша публикация работает медленно, скорее всего, ваш Apache использует prefork. Выясним это, выполнив команду в терминале:
apache2ctl -V | grep -i mpm
# или для CentOS/RHEL
httpd -V | grep -i mpm
Если в выводе вы видите prefork, это и есть корень проблемы. Перейдем к шагам по исправлению ситуации.
Разберем процесс переключения на примере современных дистрибутивов (Ubuntu/Debian). Для корректной работы 1С нам необходимо отключить старый модуль и включить производительный worker или event.
Внимание: Перед переключением убедитесь, что другие ваши веб-проекты на этом сервере не используют mod_php в его классическом виде, так как он требует именно prefork. Для других сайтов в таком случае рекомендуется использовать PHP-FPM.
Выполним команды для переключения:
sudo a2dismod mpm_prefork
sudo a2enmod mpm_worker
# или
sudo a2enmod mpm_event
sudo systemctl restart apache2
После перезапуска вы заметите, что отзывчивость веб-клиента 1С выросла в разы. Однако для идеальной работы этого недостаточно.
Веб-клиент 1С генерирует огромное количество мелких HTTP-запросов. Если сервер закрывает соединение после каждого запроса, браузер тратит время на повторное TCP-рукопожатие и согласование SSL (если используется HTTPS). Рассмотрим, как настроить Keep-Alive для удержания соединения открытым.
Найдите файл конфигурации Apache (обычно /etc/apache2/apache2.conf или /etc/httpd/conf/httpd.conf) и установите следующие значения:
KeepAlive On
MaxKeepAliveRequests 500
KeepAliveTimeout 5
Параметр KeepAliveTimeout 5 позволяет серверу ждать 5 секунд перед закрытием соединения. Этого достаточно, чтобы пользователь успел нажать следующую кнопку в интерфейсе 1С без переподключения.
Иногда «залипания» происходят в момент авторизации или при переходе между разделами. Выясним причину: часто Apache пытается выполнить обратный поиск DNS (Reverse DNS lookup) для IP-адреса клиента или сервера 1С. Это может занимать от 1 до 5 секунд при каждой проверке.
Проанализируем конфигурацию и добавим директиву для отключения этого поведения:
HostnameLookups Off
Также рекомендуется явно прописать адрес вашего сервера 1С в файле /etc/hosts на Linux-машине, где установлен Apache. Это позволит системе мгновенно находить сервер имен:
192.168.1.10 1c-server.local 1c-server
1С передает данные в форматах JSON и XML. Эти текстовые данные отлично сжимаются, что критично для скорости работы через интернет. Проверим, включено ли сжатие. Нам нужно убедиться, что модуль deflate активен и настроен на типы данных 1С.
Рассмотрим пример настройки в файле публикации (.conf файл вашей базы):
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/json
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/html
</IfModule>
Это позволит существенно сократить объем передаваемого трафика и ускорить отрисовку форм в браузере.
Разберем важный нюанс: некоторые администраторы используют модуль mpm_itk, чтобы разные сайты на одном сервере работали от имен разных пользователей Linux. Важно понимать, что mpm_itk архитектурно основан на prefork. Если вы используете его, вы никогда не добьетесь высокой скорости от 1С.
Проанализируем ситуацию: если вам нужно разделение прав, вынесите публикацию 1С на отдельный экземпляр Apache или откажитесь от mpm_itk в пользу стандартного mpm_worker, настроив права доступа на уровне файловой системы для пользователя www-data (или apache).
Поскольку Apache в режиме worker открывает множество потоков и временных файлов, системные лимиты (ulimit) могут стать узким местом. Посмотрим на текущие ограничения и увеличим их для пользователя, под которым запущен веб-сервер. Для решения сопутствующих задач оптимизации операционной системы полезно использовать справочное руководство по системному администрированию Windows, Linux и 1С.
Отредактируйте файл /etc/security/limits.conf:
www-data soft nofile 65536
www-data hard nofile 65536
После этого необходимо перезайти в систему или перезагрузить сервер, чтобы изменения вступили в силу.
Напоследок убедимся, что модуль 1С корректно видит все системные библиотеки. Если какой-то библиотеки не хватает, модуль может работать нестабильно или медленно из-за постоянных ошибок поиска в логах. Проанализируем зависимости файла wsap24.so (путь может отличаться в зависимости от версии платформы):
ldd /opt/1cv8/x86_64/8.3.17.1549/wsap24.so
Если вы видите строки со значением not found, установите соответствующие пакеты (например, libgsf-1-common, libglib2.0-0 и другие). Даже если модуль запускается, отсутствие некоторых библиотек для работы с графикой или XML может замедлять обработку данных.
Мы выяснили, что основной секрет быстрой работы 1С на Linux — это многопоточность. Использование режима mpm_worker или mpm_event в сочетании с грамотной настройкой Keep-Alive и сжатия трафика позволяет добиться производительности, не уступающей (а иногда и превосходящей) работу на Windows-серверах. Помните, что 1С — это сложная экосистема, требующая тонкой настройки каждого звена цепи: от сетевого интерфейса до модулей веб-сервера.