Публикация базы 1С на сервере Apache

Пошаговое руководство настройки Web сервера Apache на Windows. Не секрет, что файловые базы через веб-сервер будут работать намного шустрее, чем через обычный доступ к сетевому каталогу. Эффект особенно заметен, когда старые компы вообще не справляются с обычным сетевым доступом, регулярно выплевывают 1С. А доступ через веб сервер даже на компьютерах серии «Хлам» работает на ура!

Хоть 1С и не рекомендует использовать веб сервер в файловом режиме (а только в серверном) — тем не меннее для маленьких предприятий с 2-3 бухгалтерами использование веб сервера на новых конфигурациях с «управляемыми формами» (Бухгалтерия 3.0, Зарплата 3.0 и прочее) — позволяет организовать довольно быстрый доступ к базе сетевых компьютеров, даже если они компьютеры эти по сути уже старый хлам. Важно лишь, что бы основной компьютер с базами и веб сервером был приличный (например Core I3, 8 Гбайт оперативки и SSD диск).

Пошаговое руководство по настройке веб-сервера 1С на Apache (включая файловый вариант баз данных)

1. Скачиваем установщик Apache

По каким-то причинам все новые версии (например 2.4.25)  Apache перестал выкладывать в виде самораспаковывающегося дистрибутива. Для нас вполне приемлемо использовать не самый последний дистрибутив 2.2.25 — позволяющий получить удобный установщик и избежать дополнительных манипуляций.

Скачиваем установщик со страницы официального сайта https://archive.apache.org/dist/httpd/binaries/win32/

Обращаю внимание — нам удобно использовать именно *.msi установщик

По рекомендации пользователя ogre2007 (спасибо, Владимир) выкладываю ссылку на Apache версии 2.4 (www.apachelounge.com). Также с его слов — если качаете х64, то будьте готовы поставить аналогичную х64 1с платформу и в httpd.conf отредактировать строку LoadModule _1cws_module «C:/Program Files/1cv8/8.3.9.2016/bin/wsap24.dll.
Но сам не рекомендую использовать 64-битную 1С, потому как, с высокой степенью вероятности, возникнут гигантские сложности при подключении торгового оборудования, или каких-то других сторонних библиотек.

Выбираем “no ssl” дистрибутив, если базы будут открыты только внутри нашей локальной сети или “ssl” дистрибутив, если база будет открываться в интернете. Дополнительно про настройку ssl можно почитать в статье инфостарт  1С + Apache + SSL: почему вы должны использовать SSL (наглядная демонстрация)

В нашем примере будем настраивать сервер без ssl для использования только внутри локальной сети.

2. Запускаем скачанный установщик

Заполняем Network Domain: Localhost, Server name: Localhost

Нажимает NEXT, Setup type: Typical NEXT, NEXT, INSTALL… FINISH

3. Проверяем запустился ли веб сервер

Для этого открываем любой броузер и указываем адрес страницы http://localhost

Мы должны увидеть страничку с надписью It Works !

4. Публикуем нашу базу на веб сервере.

Открываем конфигуратор нашей базы  (Запуск 1С обязательно от имени администратора)

Переходим в Администрирование — «Публикация на веб-сервере»Заполняем имя ЛАТИНСКИМИ БУКВАМИ БЕЗ ПРОБЕЛОВ (можно использовать подчеркивание)Веб сервер ApacheКаталог — по сути произвольный каталог с файлами веб сервера для текущей базы. Желательно название каталога, что бы совпадало с названием базы (для простоты). Остальные флажки оставляем как на картинке. Смысл и необходимость каждого флажка можно будет разобрать позже. Нажимаем «Опубликовать». Если при нажатии опубликовать вы видите сообщение Невозможно записать c:\Program Files (x86)\Apache …. значит вы запустили 1С не от имени администратора. Закройте 1С и заново запустите (теперь «от имени администратора»)Вы должны увидеть сообщение «Публикация выполнена»На вопрос «Перезапустить ли веб-сервер» — всегда соглашаемся. Пробуем открыть в броузере нашу базу. С текущего компьютера (где установлен веб-сервер) http://localhost/UNF_InternetMagazin/

И если все удачно — то с других компьютеров — http://192.168.0.189/UNF_InternetMagazin/

Подводные камни

1. Решение проблемы с ошибкой AH00341: winnt_accept: Asynchronous AcceptEx failed на сервере Apache

Довольно внезапно, мой сервер стал сбоить. Внешне это выглядело как отсутствие ответа от сервера, которое может быть вызвано, например, большой загруженностью. Быстрый анализ показал, что в моменты, когда сервер не отвечает, он не загружен. Ошибка появлялась произвольно, я связываю её с попыткой загрузки страниц, использующих ajax. Временно устранить ошибку помогал только перезапуск сервера. 

Информация о компьютере с сервером: Windows x64, Apache x64. Хотя, как выяснилось позже, эта проблема уже довольно древняя и встречалась и на предыдущих версиях Apache.

Я посмотрел логи ошибок сервера и увидел там следующее:

[Thu Jun 05 07:24:55.747090 2014] [mpm_winnt:notice] [pid 1784:tid 444] AH00455: Apache/2.4.9 (Win64) PHP/5.5.13 configured -- resuming normal operations
[Thu Jun 05 07:24:55.747090 2014] [mpm_winnt:notice] [pid 1784:tid 444] AH00456: Apache Lounge VC11 Server built: Mar 16 2014 12:42:59
[Thu Jun 05 07:24:55.747090 2014] [core:notice] [pid 1784:tid 444] AH00094: Command line: 'c:\Server\bin\Apache24\bin\httpd.exe -d C:/Server/bin/Apache24'
[Thu Jun 05 07:24:55.748090 2014] [mpm_winnt:notice] [pid 1784:tid 444] AH00418: Parent: Created child process 4952
[Thu Jun 05 07:24:55.957978 2014] [mpm_winnt:notice] [pid 4952:tid 388] AH00354: Child: Starting 64 worker threads.
[Thu Jun 05 07:26:16.695036 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:26:16.695036 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:26:48.250710 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:26:48.250710 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:29:27.137784 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:29:27.137784 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.

Гугление вывело меня на баг-репорты и на форумы по Apache. По итогам чтения, появились две новости: хорошая и плохая. Плохая новость заключается в том, что эта ошибка появляется на Apache версий 2.2 и 2.4 и при этом точного ответа, с чем она связана, нет. Зато хорошая новость заключается в том, что есть решение этой проблемы! В файл httpd.conf нужно добавить следующие строки:

Для Apache 2.2: 

Win32DisableAcceptEx 
EnableSendfile off 
EnableMMAP off 

Для Apache 2.4: 

AcceptFilter http none 
AcceptFilter https none 
EnableSendfile off 
EnableMMAP off 

Я не знаю, что именно делают эти настройки, так, как авторы, которые их предложили, этот вопрос не раскрыли. Но это работает! Это могу подтвердить я, а также подтверждают другие, кто сталкивался с этой проблемой.

2. Apache не запускается без записи в логи.

Права и разрешения для папок Apache.

Информация взята тут и тут

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий