Параметр server.host управляет адресом, на котором Vite
запускает dev-сервер. От этой настройки зависит, будет ли приложение
доступно только локально, из локальной сети, внутри Docker-контейнера,
через виртуальную машину, прокси-сервер или внешний туннель.
По умолчанию Vite запускается только на localhost, что
обеспечивает безопасную локальную разработку, но ограничивает доступ
извне.
Базовый пример:
import { defineConfig } from 'vite'
export default defineConfig({
server: {
host: 'localhost'
}
})
localhostНаиболее распространённый вариант.
server: {
host: 'localhost'
}
При таком режиме:
Обычно сервер становится доступен по адресу:
http://localhost:5173
или:
http://127.0.0.1:5173
localhostВ разных ОС и сетевых конфигурациях localhost может
резолвиться:
127.0.0.1
::1
Иногда это вызывает проблемы:
В подобных случаях используют явный IP-адрес.
0.0.0.0Наиболее важный режим для сетевого доступа.
server: {
host: '0.0.0.0'
}
Такой сервер начинает слушать все сетевые интерфейсы:
После запуска Vite обычно показывает несколько адресов:
Local: http://localhost:5173/
Network: http://192.168.1.10:5173/
server: {
host: '0.0.0.0'
}
После этого приложение можно открыть с мобильного устройства:
http://192.168.1.10:5173
Это особенно важно при:
Без 0.0.0.0 контейнер часто недоступен извне.
Правильная конфигурация:
server: {
host: '0.0.0.0'
}
Docker:
ports:
- "5173:5173"
Если оставить localhost, Vite будет слушать только
внутри контейнера.
Для Windows Subsystem for Linux также почти всегда используется:
server: {
host: '0.0.0.0'
}
Иначе Windows-браузер может не получить доступ к Linux-серверу.
Vite позволяет указать конкретный сетевой интерфейс.
Пример:
server: {
host: '192.168.0.15'
}
В этом случае сервер будет доступен только через указанный IP.
Например:
Указание конкретного IP помогает избежать конфликтов.
Можно запретить подключение через другие интерфейсы.
Например:
server: {
host: '127.0.0.1'
}
или:
server: {
host: '192.168.1.50'
}
trueVite поддерживает специальное сокращение:
server: {
host: true
}
Эквивалент:
host: '0.0.0.0'
Однако строковый вариант обычно считается более читаемым.
Vite умеет работать с IPv6-адресами.
Пример:
server: {
host: '::'
}
или:
server: {
host: '::1'
}
::1IPv6-аналог localhost.
::IPv6-аналог 0.0.0.0.
server.host напрямую влияет на работу Hot Module
Replacement.
Если HMR не может подключиться к websocket-серверу:
Типичная проблема:
WebSocket connection failed
Причина:
server.hmr.hostИногда необходимо отдельно указать host для HMR.
Пример:
export default defineConfig({
server: {
host: '0.0.0.0',
hmr: {
host: 'localhost'
}
}
})
Это особенно важно:
При HTTPS настройка host становится особенно важной.
Пример:
server: {
host: '0.0.0.0',
https: true
}
Если сертификат выписан на конкретный домен:
server: {
host: 'dev.example.local',
https: {
key: fs.readFileSync('./cert.key'),
cert: fs.readFileSync('./cert.crt')
}
}
Например:
Vite часто запускается так:
server: {
host: '0.0.0.0'
}
А внешний сервер проксирует запросы.
Пример Nginx:
location / {
proxy_pass http://127.0.0.1:5173;
}
В monorepo dev-сервер может запускаться:
В таких случаях localhost часто вызывает проблемы.
Наиболее универсальный вариант:
server: {
host: '0.0.0.0'
}
Параметр можно указать без изменения конфигурации.
vite --host localhost
vite --host 0.0.0.0
vite --host 192.168.1.15
{
"scripts": {
"dev": "vite --host"
}
}
Сокращённый вариант --host без значения автоматически
включает режим:
0.0.0.0
Иногда host выносится в environment-конфигурацию.
Пример:
VITE_HOST=0.0.0.0
server: {
host: process.env.VITE_HOST
}
Причина:
host: 'localhost'
Решение:
host: '0.0.0.0'
Причина:
Vite слушает loopback внутри контейнера.
Решение:
host: '0.0.0.0'
Причины:
Решение:
server: {
host: '0.0.0.0',
hmr: {
host: 'localhost'
}
}
Ошибка:
EADDRNOTAVAIL
Причина:
указан IP, отсутствующий на машине.
Например:
host: '192.168.1.200'
при отсутствии такого интерфейса.
Ошибка:
EACCES permission denied
Иногда появляется при использовании системных портов:
server: {
host: '0.0.0.0',
port: 80
}
Порт 80 требует повышенных привилегий.
ipconfig
ip addr
ifconfig
Режим:
host: '0.0.0.0'
делает dev-сервер доступным извне.
Это означает:
Для публичных сетей такой режим нежелателен.
server: {
host: 'localhost'
}
server: {
host: '0.0.0.0'
}
server: {
host: '0.0.0.0'
}
server: {
host: '0.0.0.0'
}
server: {
host: '0.0.0.0',
hmr: {
host: 'dev.local'
}
}
import { defineConfig } from 'vite'
import fs from 'fs'
export default defineConfig({
server: {
host: '0.0.0.0',
port: 5173,
strictPort: true,
https: {
key: fs.readFileSync('./ssl/dev.key'),
cert: fs.readFileSync('./ssl/dev.crt')
},
hmr: {
protocol: 'wss',
host: 'dev.local',
port: 5173
}
}
})
Такая конфигурация подходит для: