Что такое прокси-сервер и зачем он нужен в Vue.js?
При разработке Vue.js приложений часто возникает проблема CORS (Cross-Origin Resource Sharing), когда фронтенд на localhost пытается получить данные с внешнего API. Прокси-сервер решает эту задачу, выступая посредником между вашим приложением и бэкендом. Вот ключевые преимущества:
- Обход CORS-ограничений без изменений на сервере
- Упрощение API-запросов (относительные пути вместо полных URL)
- Безопасная разработка с имитацией рабочих окружений
- Возможность перехвата и модификации запросов/ответов
Настройка прокси-сервера в Vue CLI
Для проектов на Vue CLI (vue-cli-service) конфигурация прокси выполняется через файл vue.config.js
. Пошаговый алгоритм:
- Создайте файл
vue.config.js
в корне проекта, если его нет - Добавьте секцию
devServer.proxy
с настройками:
module.exports = {
devServer: {
proxy: {
'/api': {
target: 'https://ваш-бэкенд.ру',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
}
}
}
- target: URL целевого сервера
- changeOrigin: подмена заголовка Origin (обязательно true для CORS)
- pathRewrite: перезапись пути (удаляем префикс /api)
Использование прокси в Vite
Для проектов на Vite конфигурация отличается. В файле vite.config.js
:
export default defineConfig({
server: {
proxy: {
'/api': {
target: 'http://localhost:3000',
changeOrigin: true,
rewrite: (path) => path.replace(/^/api/, '')
}
}
}
})
Ключевые отличия от Vue CLI:
- Секция называется
server.proxy
вместоdevServer.proxy
- Для перезаписи пути используется функция
rewrite
- Поддержка WebSocket-проксирования «из коробки»
Распространенные проблемы и их решения
- Прокси не работает после обновления: Остановите и перезапустите dev-сервер (
npm run serve
) - Ошибка 404 при проксировании: Проверьте pathRewrite и наличие слешей в путях
- Сертификаты SSL: Для HTTPS-целей добавьте
secure: false
в конфиг - Заголовки не передаются: Явно укажите
headers
в proxy-объекте - Медленное проксирование: Отключите сжатие через
compress: false
Часто задаваемые вопросы (FAQ)
Q: Работает ли прокси в production-сборке?
A: Нет, прокси Vue CLI/Vite активирован только в dev-режиме. Для production используйте Nginx или облачные решения.
Q: Как проксировать несколько эндпоинтов?
A: Добавьте дополнительные ключи в proxy-объект:
proxy: {
'/api': { ... },
'/uploads': { target: '...' }
}
Q: Можно ли использовать прокси для WebSockets?
A: Да, в Vite это работает автоматически. В Vue CLI добавьте ws: true
в конфиг.
Q: Как отладить прокси-запросы?
A: Включите логирование: добавьте logLevel: 'debug'
в настройки прокси.
Q: Альтернативы встроенному прокси?
A: Для сложных сценариев используйте http-proxy-middleware напрямую или инструменты вроде Charles Proxy.