Что такое Angular Proxy Dev Server и зачем он нужен?
Angular Proxy Dev Server — инструмент Angular CLI, который перенаправляет запросы с локального сервера разработки (обычно на localhost:4200) на внешний API-сервер. Это решает проблему CORS (Cross-Origin Resource Sharing), возникающую при обращении к сторонним доменам во время разработки. Без прокси браузер блокирует такие запросы из соображений безопасности. Proxy Server имитирует работу бэкенда, позволяя фронтенд-разработчикам:
- Тестировать API интеграции без развертывания бэкенда
- Избегать ошибок CORS в development-режиме
- Работать с разными средами (dev/stage/prod) через единую конфигурацию
- Упростить отладку сетевых запросов
Настройка прокси в Angular: пошаговое руководство
Для настройки прокси-сервера в Angular выполните следующие шаги:
- Создайте файл конфигурации: В корне проекта создайте
proxy.conf.json
(можно использовать JS-формат для сложных сценариев). - Определите правила перенаправления: Укажите целевой сервер и пути. Пример базовой конфигурации:
{ "/api/*": { "target": "https://ваш-api-сервер.com", "secure": false, "changeOrigin": true } }
- Интегрируйте с Angular CLI: В
angular.json
добавьте в разделserve
:"options": { "proxyConfig": "proxy.conf.json" }
- Запустите сервер: Выполните
ng serve
. Все запросы к/api
будут перенаправлены на указанный target.
Продвинутые сценарии конфигурации прокси
Для сложных случаев используйте JavaScript-файл (proxy.conf.js
), позволяющий:
- Динамически менять target в зависимости от окружения
- Обрабатывать пути с помощью регулярных выражений
- Добавлять кастомные заголовки авторизации
module.exports = { '/projects/*': { target: process.env.API_URL || 'http://localhost:3000', pathRewrite: { '^/projects': '' }, onProxyReq: (proxyReq) => { proxyReq.setHeader('Authorization', 'Bearer test-token'); } } };
Типичные проблемы с Angular Proxy и их решения
- Прокси игнорирует запросы: Проверьте совпадение пути в конфиге. Используйте
"logLevel": "debug"
в proxy.conf.js для диагностики. - Ошибки SSL: При работе с HTTPS целевыми серверами установите
"secure": false
(только для dev!). - Не применяются изменения: Перезапустите
ng serve
после правок proxy.conf.json. - Проблемы с куками: Добавьте
"cookieDomainRewrite": "localhost"
в конфигурацию.
Часто задаваемые вопросы (FAQ)
Q: Можно ли использовать несколько прокси-файлов одновременно?
A: Да, объедините их через const config = [require('./proxy1.conf'), require('./proxy2.conf')];
в proxy.conf.js.
Q: Как проксировать WebSocket-соединения?
A: Добавьте "ws": true
в конфигурацию для нужного пути.
Q: Почему прокси не работает с Angular Universal?
A: Proxy Dev Server предназначен только для клиентской разработки. Для SSR используйте middleware в Express-сервере.
Q: Как избежать утечек конфиденциальных данных в proxy-конфиге?
A: Никогда не коммитьте файлы с credentials. Используйте .env-переменные через process.env
в JS-конфиге.
Q: Альтернативы встроенному прокси?
A: Да, например, CORS-расширения для браузера (только для тестирования) или ручная настройка CORS на бэкенде.
Заключение
Angular Proxy Dev Server — незаменимый инструмент для комфортной разработки, устраняющий головную боль с CORS. Правильная настройка прокси через proxy.conf.json
или proxy.conf.js
ускоряет интеграцию с API и улучшает workflow. Помните: прокси работает только в dev-режиме (ng serve
), для продакшена настройте CORS на сервере или используйте относительные пути. Экспериментируйте с pathRewrite, changeOrigin и другими опциями для тонкой настройки поведения запросов.