Зачем это нужно
При разработке на платформе 1С нередко требуется локальный веб-сервер Apache — для публикации баз, веб-сервисов, REST API. Стандартная установка Apache на Windows требует ручной правки конфигурации, регистрации службы, настройки брандмауэра. Этот скрипт автоматизирует весь процесс — от скачивания дистрибутива до открытия браузера с подтверждением работы сервера.
Возможности
- Автоопределение разрядности ОС (x86 / x64)
- Скачивание актуальной версии Apache с apachelounge.com (через вспомогательный PHP-скрипт на imiron.ru)
- Проверка и автоустановка Visual C++ Redistributable (VS 2017–2026)
- Несколько экземпляров Apache на разных портах — каждый как отдельная служба Windows
- Реестр экземпляров через Windows Registry (не зависит от расположения скрипта/exe)
- Обнаружение уже установленных Apache через сканирование SCM
- Интерактивное меню выбора папки и порта с отображением занятости
- Проверка свободного места на диске перед установкой и бэкапом
- Бэкап перед переустановкой или удалением (только conf\ или папка целиком, упаковка в zip)
- Управление правилами брандмауэра Windows — всплывающее окно «Разрешить доступ» не появляется
- Полное логирование всех операций с временными метками
- Ссылка на лог установки прямо на стартовой странице Apache в браузере
- Совместим с ps2exe — компилируется в standalone .exe без зависимостей
- Две языковые версии: русская и английская
Что устанавливается
После успешной установки:
- Apache HTTP Server 2.4 в выбранной папке (например
D:\Apache24) - Служба Windows с именем
Apache_<порт>(напримерApache_8080) — стартует автоматически - Правило брандмауэра для httpd.exe на выбранном порту
- Запись в реестре
HKLM\SOFTWARE\ApacheInstaller\Instances\Apache_<порт> - Кастомная стартовая страница с информацией о сервере и ссылкой на лог установки
Конфигурация Apache
Скрипт записывает минимальный безопасный httpd.conf:
Listen 8080 # без привязки к IP — надёжнее на Windows
LoadModule authz_host_module ... # обязателен для Require ip
LoadModule headers_module ... # заголовки безопасности
ServerTokens Prod # скрываем версию
ServerSignature Off
TraceEnable Off # защита от XST
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
<Location /server-status>
SetHandler server-status
Require ip 127.0.0.1 ::1 # статус только с localhost
</Location>
Listen 8080 без IP-адреса? Listen 127.0.0.1:8080 на Windows иногда вызывает ошибку AH00072: make_sock: could not bind, если hostname резолвится иначе чем ожидает Apache. Listen 8080 работает надёжно.mod_authz_host? Директива Require ip принадлежит именно этому модулю, а не mod_authz_core. Без него Apache падает с AH00526: Unknown Authz provider: ip при старте.Несколько экземпляров
Скрипт поддерживает установку нескольких Apache на одной машине на разных портах. Каждый экземпляр получает уникальное имя службы по порту: Apache_80, Apache_8080 и т.д.
Регистрируется командой:
httpd.exe -k install -n Apache_8080
При повторном запуске скрипта список установленных экземпляров отображается в шапке. Пункт «Удалить» в меню активен только если есть что удалять.
Требования
| Параметр | Значение |
|---|---|
| ОС | Windows 7 SP1 или новее |
| PowerShell | 5.1 или новее |
| Права | Администратор |
| Сеть | Доступ в интернет |
Права администратора проверяются в runtime через WindowsPrincipal.IsInRole — надёжнее, чем #Requires -RunAsAdministrator, который иногда игнорируется.
Запуск
Вариант 1 — через bat-файл (рекомендуется)
install-ru.bat
Bat-файл автоматически запрашивает права через UAC. Если рядом есть скомпилированный exe — запускает его, иначе запускает ps1 через PowerShell.
Вариант 2 — PowerShell напрямую
powershell -ExecutionPolicy Bypass -File src\install-apache-ru.ps1
Вариант 3 — скомпилированный exe
install-apache-ru.exe
Компиляция в exe
build-exe.bat
Bat-файл устанавливает ps2exe если нужно и компилирует обе языковые версии.
Или вручную:
Install-Module -Name ps2exe -Scope CurrentUser -Force
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Import-Module ps2exe
Invoke-ps2exe .\src\install-apache-ru.ps1 .\install-apache-ru.exe -requireAdmin -noConsole:$false
$MyInvocation.MyCommand.Path возвращает $null. Скрипт определяет рабочую папку через Process.MainModule.FileName — логи, бэкапы и реестр экземпляров всегда окажутся рядом с exe, а не в %TEMP%.Лог установки
Каждый запуск создаёт файл install-apache-YYYYMMDD-HHMMSS.log рядом со скриптом. В лог пишется всё: ответы пользователя, вывод httpd.exe, HTTP-проверка, ошибки.
Пример записи при успешной установке:
[2026-03-27 10:07:35] [INFO] httpd.exe stderr: Installing the 'Apache_8080' service
[2026-03-27 10:07:35] [INFO] The 'Apache_8080' service is successfully installed.
[2026-03-27 10:07:35] [INFO] httpd.exe ExitCode: 0
[2026-03-27 10:07:38] [OK] Service Apache_8080 started.
[2026-03-27 10:07:39] [OK] HTTP response: 200
[2026-03-27 10:07:39] [OK] Installation complete
Известные особенности Windows
Кириллица в одинарных кавычках
В PowerShell-скриптах ломает парсер при сохранении файла в UTF-8 без BOM на русских Windows с кодировкой консоли CP1251. В скрипте все строки с кириллицей используют двойные кавычки "...".
Bat-файлы
Сохранены в ANSI (CP1251) без BOM — именно так cmd.exe читает их корректно.
Ручная установка
Если вы хотите разобраться в процессе установки подробнее или настроить Apache под конкретную задачу вручную — см. отдельную статью:
Вступайте в нашу телеграмм-группу Инфостарт