В настоящее время у меня есть приложение Angular, которое получает данные из бэкенда Symfony. При разработке я использовал ng serve
систему прокси-сервера разработки для перенаправления маршрутов /api
, /oauth-token
и /media
на бэкенд-сервер, и это работало отлично.
Теперь, когда я хочу развернуть приложение на веб-сервере, я настраиваю сервер Nginx, который обслуживает статические файлы, сгенерированные построенным приложением Angular. Поскольку сервер разработки больше не может проксировать запросы, мне приходится делать это через файлы conf Nginx, чтобы у меня был функциональный обратный прокси.
Мне просто нужно, чтобы если я запрошу что-то вроде GET http://localhost/api/products/1
, этот запрос был проксирован в GET http://localhost:81/api/products/1
. Это должно быть одинаково для всех других методов запроса: POST, PUT, PATCH и т. д.
Проблема в том, что я не могу написать файл conf, который бы подходил для моих нужд в этом варианте использования. Лучшее, что я получаю, это ответ 302 или 405.
Вот файл конфигурации, который у меня есть на данный момент:
server {
server_name localhost;
root /var/www/webapp;
location / {
try_files $uri $uri/ /index.html;
}
location ~ ^/(?:oauth-token|api|media)/ {
proxy_pass http://localhost:81;
}
}
Бэкэнд размещается на том же сервере и экземпляре nginx, что и фронтэнд, но на другом порту (порт 81 вместо 80).
Я попробовал разделить свой блок местоположения на 3 отдельных блока для каждого маршрута на случай, если мое регулярное выражение или прокси-пароль окажутся неверными, но я получил те же результаты:
location /api/ {
proxy_pass http://localhost:81/api/;
}
location /oauth-token/ {
proxy_pass http://localhost:81/oauth-token/;
}
Я также попытался удалить завершающие слеши в конце URL-адреса прокси-сервера, чтобы проверить, не в этом ли проблема, но безрезультатно.
Я попробовал следовать советам, которые нашел в других постах на Server Fault, но, к сожалению, ни один из них мне не помог.
Можете ли вы помочь мне настроить этот файл так, чтобы эти запросы API проксировались на мой внутренний сервер? Спасибо.