VueJS Proxy Server: Полное Руководство по Настройке и Решению Проблем

Что такое прокси-сервер и зачем он нужен в Vue.js?

При разработке Vue.js приложений часто возникает проблема CORS (Cross-Origin Resource Sharing), когда фронтенд на localhost пытается получить данные с внешнего API. Прокси-сервер решает эту задачу, выступая посредником между вашим приложением и бэкендом. Вот ключевые преимущества:

  • Обход CORS-ограничений без изменений на сервере
  • Упрощение API-запросов (относительные пути вместо полных URL)
  • Безопасная разработка с имитацией рабочих окружений
  • Возможность перехвата и модификации запросов/ответов

Настройка прокси-сервера в Vue CLI

Для проектов на Vue CLI (vue-cli-service) конфигурация прокси выполняется через файл vue.config.js. Пошаговый алгоритм:

  1. Создайте файл vue.config.js в корне проекта, если его нет
  2. Добавьте секцию 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.

Proxy Ninja
Добавить комментарий