Я хочу иметь возможность доступа к своему серверу API (работающему на узле) из подпапки /api/
и отправлять все остальные запросы моему приложению Angular.
В настоящее время API работает на другом поддомене, и моя конфигурация выглядит следующим образом:
server {
listen 80;
server_name appapi.site.com;
location / {
proxy_pass http://localhost:3000/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
}
}
server {
listen 80;
server_name app.site.com;
index index.html;
root /var/www/html/app.site.com/;
location / {
try_files $uri /$uri /index.html;
}
}
Я попробовал изменить местоположение API на /api/
вместо , /
но тогда я не могу получить доступ к своему приложению.
Не хочу обслуживать статические файлы с узла, поэтому, пожалуйста, не предлагайте этого.
решение1
Я предполагаю, что вы хотите обслуживать http://app.site.com/api/xxx
Добавление второго блока местоположения для вашего /api/
пути будет отправлять любой URI, начинающийся с , /api/
на прокси-сервер, а все остальное — в ваше приложение Angular.
server {
listen 80;
server_name app.site.com;
index index.html;
root /var/www/html/app.site.com/;
location / {
try_files $uri /$uri /index.html;
}
location /api/ {
proxy_pass http://localhost:3000/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
}
}
Конфигурация прокси не удалит /api/ из пути, и URI будет представлен полностью вашему серверу API. Это контролируется завершающим слешем в proxy_pass http://localhost:3000/
. См.https://stackoverflow.com/questions/22759345/nginx-trailing-slash-in-proxy-pass-urlдля получения более подробной информации об этом.