Настройка локального веб-сервера на WSL2: Nginx/Apache, виртуальные хосты и доступ из Windows | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Настройка локального веб-сервера на WSL2: Nginx/Apache, виртуальные хосты и доступ из Windows

04 мая 2026 8 мин. чтения

Зачем нужна профессиональная среда разработки на WSL2 и что мы построим

WSL2 предоставляет полноценное ядро Linux внутри Windows, что устраняет компромиссы виртуальных машин по производительности и Docker Desktop по сложности изоляции. Эта инструкция дает готовое решение: веб-сервер (Nginx или Apache) с автоматическим запуском через systemd, изолированные проекты на виртуальных хостах, доступ по доменам .test из Windows и локальный HTTPS. Все шаги проверены на Ubuntu 22.04/24.04 LTS в WSL2 и решают типичные ошибки, включая конфликты портов и проблемы с правами доступа.

Вы получите среду, которая работает после перезагрузки Windows и имитирует конфигурацию production-сервера. Это экономит время на отладке и снижает риск ошибок при переносе кода.

Подготовка WSL2 и установка веб-сервера

Проверьте версию WSL и дистрибутив. Откройте терминал WSL и выполните команду wsl --version. Убедитесь, что используется WSL2. Обновите систему Ubuntu командами:

sudo apt update
sudo apt upgrade -y

Выбор между Nginx и Apache для локальной разработки

Выбор зависит от задач. Nginx проще конфигурировать для виртуальных хостов, он потребляет меньше памяти в WSL и быстрее обрабатывает статику. Apache удобнее для сложных правил .htaccess и интеграции с модулями вроде mod_rewrite без перезагрузки конфигурации.

Для большинства проектов веб-разработки рекомендуем Nginx из-за скорости и простоты синтаксиса конфигов. Если вы работаете с legacy-проектами, которые требуют специфичных модулей Apache, выбирайте его.

Установка Nginx/Apache и проверка базовой конфигурации

Для установки Nginx выполните:

sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

Для установки Apache выполните:

sudo apt install apache2 -y
sudo systemctl start apache2
sudo systemctl enable apache2

Проверьте работу сервера командой curl localhost. Вы должны получить HTML-ответ с заголовком "Welcome to nginx" или "Apache2 Ubuntu Default Page". Настройте права на директорию для сайтов:

sudo chown -R $USER:$USER /var/www
sudo chmod -R 755 /var/www

Основные конфигурационные файлы Nginx находятся в /etc/nginx/sites-available/ и симлинкуются в /etc/nginx/sites-enabled/. В Apache аналогичная структура использует /etc/apache2/sites-available/ и /etc/apache2/sites-enabled/.

Гарантия стабильности: настройка автозапуска служб в WSL2

Веб-сервер в WSL по умолчанию не запускается автоматически после перезагрузки Windows, потому что система инициализации WSL отличается от стандартного Linux. Решение - интеграция службы в systemd, если он поддерживается, или создание надежного init-скрипта.

Проверьте поддержку systemd в вашем дистрибутиве WSL командой systemctl --version. Если systemd активен, службы Nginx/Apache уже добавлены в автозагрузку командой enable. Если systemd не используется, создайте скрипт для /etc/init.d/ или настройте запуск через /etc/rc.local.

Избегайте "костылей" вроде бесконечных циклов в screen или запуска скриптов в фоне без демонизации. Это ненадежно для production-среды.

Интеграция веб-сервера в систему инициализации WSL

При активном systemd используйте стандартные команды для управления службой:

sudo systemctl start nginx   # Запустить
sudo systemctl stop nginx    # Остановить
sudo systemctl restart nginx # Перезапустить
sudo systemctl enable nginx  # Добавить в автозагрузку

Если systemd недоступен, создайте скрипт в /etc/init.d/nginx-custom с правами выполнения (chmod +x) и добавьте его в автозагрузку командой sudo update-rc.d nginx-custom defaults. Скрипт должен содержать стандартные функции start, stop, restart для управления процессом.

Автоматизация периодических задач: cron и flock

Для задач вроде очистки кэша или резервного копирования используйте cron. Чтобы предотвратить наложение процессов, если выполнение скрипта превышает интервал между запусками, применяйте утилиту flock из пакета util-linux.

Пример настройки в crontab (crontab -e):

* * * * * flock -x /var/run/task.lock /path/to/script.sh

Эта команда гарантирует, что следующий запуск script.sh начнется только после завершения предыдущего. Flock создает эксклюзивную блокировку файла /var/run/task.lock.

Организация работы с несколькими проектами: виртуальные хосты

Создайте стандартную структуру директорий для изоляции проектов. Например:

mkdir -p ~/projects/myproject/public
mkdir -p ~/projects/anotherproject/public

Каталог public будет корневым для веб-сервера. Это упрощает разграничение кода и конфигураций.

Создание структуры директорий и файла конфигурации vhost

Для Nginx создайте конфиг в /etc/nginx/sites-available/myproject.test:

server {
    listen 80;
    server_name myproject.test www.myproject.test;
    root /home/$USER/projects/myproject/public;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
    }
}

Активируйте хост и проверьте синтаксис:

sudo ln -s /etc/nginx/sites-available/myproject.test /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Для Apache конфиг в /etc/apache2/sites-available/myproject.test.conf будет содержать директиву <VirtualHost *:80> с аналогичными параметрами ServerName и DocumentRoot. Активация выполняется командами a2ensite и systemctl reload apache2.

Установите правильные права доступа для директории проекта:

sudo chown -R $USER:www-data ~/projects/myproject/public
sudo chmod -R 755 ~/projects/myproject/public

Если вы столкнулись с ошибками 403 или 404 после настройки, проверьте практическую шпаргалку по диагностике ошибок веб-сервера. Там разобраны пошаговые алгоритмы проверки прав, анализа логов и решения проблем с виртуальными хостами.

Резолвинг доменных имен: от /etc/hosts до локального DNS

Быстрый способ - редактирование файла hosts в Windows. Откройте блокнот с правами администратора, откройте файл C:\Windows\System32\drivers\etc\hosts и добавьте строку:

127.0.0.1 myproject.test www.myproject.test

Способ работает, но не масштабируется при большом количестве проектов. Продвинутое решение - настройка Dnsmasq внутри WSL для автоматического резолва всех доменов .test. Установите Dnsmasq и настройте его как локальный DNS-сервер, указав в настройках сети Windows IP-адрес WSL в качестве DNS.

Для глубокого понимания работы с локальными доменами и SSL изучите руководство по настройке профессиональной локальной среды разработки. В нем подробно разобран резолвинг через Dnsmasq и генерация самоподписанных сертификатов.

Решение проблем сетевого доступа и безопасности

WSL2 использует виртуальный адаптер Hyper-V с динамическим IP. Это может блокировать доступ к серверу из Windows или локальной сети. Решение - настройка брандмауэра Windows и, при необходимости, проброс портов.

Узнайте текущий IP WSL2 командой:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Настройка брандмауэра Windows и доступ по IP WSL

Создайте правило для входящих подключений в "Брандмауэре Защитнике Windows".

  1. Откройте "Панель управления" -> "Система и безопасность" -> "Брандмауэр Защитника Windows".
  2. Выберите "Дополнительные параметры".
  3. Создайте новое правило для входящих подключений.
  4. Укажите тип правила "Для порта", протокол TCP, порты 80 и 443.
  5. В действии выберите "Разрешить подключение".
  6. В профиле отметьте "Частная" и "Публичная" сети.
  7. Укажите имя правила, например "WSL Web Server".

Если порт 80 занят Skype или другим приложением, измените порт прослушивания в конфиге веб-сервера на 8080 или другой свободный.

Генерация и установка самоподписанных SSL-сертификатов

Для локального HTTPS сгенерируйте корневой сертификат и сертификат для домена. Создайте директорию для сертификатов:

mkdir -p ~/ssl/ca
mkdir -p ~/ssl/certs

Сгенерируйте корневой ключ и сертификат:

openssl genrsa -out ~/ssl/ca/ca.key 2048
openssl req -x509 -new -nodes -key ~/ssl/ca/ca.key -sha256 -days 3650 -out ~/ssl/ca/ca.crt -subj "/C=RU/ST=State/L=City/O=Org/OU=OrgUnit/CN=Local CA"

Создайте конфиг для сертификата домена (myproject.test.cnf):

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn

[dn]
C = RU
ST = State
L = City
O = Org
OU = OrgUnit
CN = myproject.test

[v3_req]
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = myproject.test
DNS.2 = www.myproject.test

Сгенерируйте ключ и CSR, затем подпишите сертификат корневым CA:

openssl genrsa -out ~/ssl/certs/myproject.test.key 2048
openssl req -new -key ~/ssl/certs/myproject.test.key -out ~/ssl/certs/myproject.test.csr -config myproject.test.cnf
openssl x509 -req -in ~/ssl/certs/myproject.test.csr -CA ~/ssl/ca/ca.crt -CAkey ~/ssl/ca/ca.key -CAcreateserial -out ~/ssl/certs/myproject.test.crt -days 365 -sha256 -extfile myproject.test.cnf -extensions v3_req

Настройте Nginx на использование SSL. Добавьте в конфиг виртуального хоста блок:

server {
    listen 443 ssl http2;
    server_name myproject.test www.myproject.test;
    ssl_certificate /home/$USER/ssl/certs/myproject.test.crt;
    ssl_certificate_key /home/$USER/ssl/certs/myproject.test.key;
    # ... остальные директивы
}

Добавьте корневой сертификат ca.crt в доверенные в Windows через "Управление компьютерными сертификатами" -> "Доверенные корневые центры сертификации".

Интеграция инструментов отладки и альтернативные подходы

Для отладки PHP-кода настройте Xdebug. Установите расширение и настройте php.ini.

Настройка Xdebug для отладки PHP-кода

Установите Xdebug:

sudo apt install php-xdebug

Добавьте в /etc/php/8.3/fpm/conf.d/20-xdebug.ini (путь может меняться в зависимости от версии PHP):

zend_extension=xdebug.so
xdebug.mode=develop,debug
xdebug.client_host=host.docker.internal
xdebug.start_with_request=yes

Перезапустите PHP-FPM:

sudo systemctl restart php8.3-fpm

В IDE (PhpStorm, VSCode) настройте отладку, указав порт 9003 (по умолчанию для Xdebug 3). Установите точку останова и запустите отладку с параметром XDEBUG_SESSION=1.

Альтернатива ручной настройке - использование Docker Compose для полной изоляции окружений или Laravel Valet для простоты развертывания проектов на PHP. Docker требует больше ресурсов, но гарантирует идентичность сред разработки и production. Valet работает быстро, но привязан к экосистеме Laravel и macOS/Linux.

Для освоения основ администрирования Linux, которые потребуются при работе с WSL и веб-серверами, обратитесь к практическому руководству по Linux для IT-специалистов. Там собраны готовые команды для работы с bash, управления пакетами и настройки сетей.

Итоги и решение частых проблем

Чек-лист работоспособности системы:

  1. Веб-сервер запущен (systemctl status nginx/apache2).
  2. Служба добавлена в автозагрузку (systemctl is-enabled nginx/apache2).
  3. Конфиг виртуального хоста активен и синтаксис корректен.
  4. Домен добавлен в файл hosts Windows или настроен через Dnsmasq.
  5. Брандмауэр Windows разрешает подключения к портам 80/443.
  6. SSL-сертификаты сгенерированы и установлены в браузере.

Таблица частых ошибок и решений:

Ошибка Причина Решение
Служба не запускается через systemd Отсутствие поддержки systemd в WSL Используйте init-скрипт в /etc/init.d/ или настройте запуск через /etc/rc.local
Доступен только из WSL, но не из Windows Блокировка брандмауэром Windows или неверный IP Создайте правило в брандмауэре для IP WSL, проверьте порт командой ss -tlnp
Ошибка 403 Forbidden Неправильные права доступа к директории проекта Установите права chown -R $USER:www-data /path/to/project и chmod -R 755
SSL-сертификат не доверенный Корневой сертификат не добавлен в хранилище доверенных Импортируйте файл ca.crt в "Доверенные корневые центры сертификации" Windows

Для поддержания среды в актуальном состоянии регулярно обновляйте пакеты Ubuntu (sudo apt update && sudo apt upgrade) и проверяйте конфиги после обновления веб-сервера. Резервное копирование конфигурационных файлов и директорий проектов предотвратит потерю данных.

Если вы ищете способы автоматизации работы с ИИ-моделями для генерации кода или документации, рассмотрите сервис AiTunnel. Это агрегатор API для более 200 моделей нейросетей, включая GPT, Gemini и Claude, с оплатой в рублях и управлением бюджетами.

Для тонкой настройки Apache в production-среде, включая оптимизацию и безопасность, изучите руководство по профессиональной конфигурации Apache2. Там приведены готовые конфигурации виртуальных хостов и настройки модулей безопасности.

Поделиться:
Сохранить гайд? В закладки браузера