При настройке локальной среды разработки с использованием WSL2 и Nginx часто возникает проблема: браузер показывает ошибку ERR_EMPTY_RESPONSE при попытке доступа к локальным сайтам. В этой статье мы разберем причины возникновения проблемы и предоставим пошаговое решение.
Причина проблемы
Проблема возникает из-за особенностей архитектуры WSL2:
- WSL2 работает как полноценная виртуальная машина
- Имеет собственный IP-адрес в виртуальной сети
- Windows и WSL2 находятся в разных сетевых пространствах
- Прямой доступ к localhost WSL2 из Windows невозможен
ERR_EMPTY_RESPONSE возникала потому что:
- Браузер в Windows пытался получить доступ к localhost (127.0.0.1)
- Но Nginx в WSL2 работал на другом IP-адресе (в виртуальной сети WSL2)
- Соединение не могло быть установлено напрямую
Решение
Настройка Port Proxy в Windows
# Получение IP-адреса WSL2
$wslip = (wsl hostname -I).Trim()
Write-Host "WSL IP: $wslip"
# Настройка port proxy
netsh interface portproxy delete v4tov4 listenport=80 listenaddress=0.0.0.0
netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=$wslip
# Проверка настроек
netsh interface portproxy show all
$wslip
— это «айпи» Вашей WSL
Что произошло?
Эта команда создаст «мост» между:
- Windows (0.0.0.0:80) — куда приходят запросы от браузера
- WSL2 (внутренний IP:80) — где работает Nginx
Процесс работы теперь выглядит так:
Браузер (Windows) -> localhost:80 -> Port Proxy -> WSL2 IP:80 -> Nginx
Не забудьте сделать:
Очистка DNS-кэша в Windows ipconfig /flushdns
и перезапуск Nginx sudo service nginx restart
Добавить комментарий