Quiero poder acceder a mi servidor API (que se ejecuta en el nodo) desde una subcarpeta /api/
y enviar todas las demás solicitudes a mi aplicación angular.
Actualmente, la API se ejecuta en un subdominio diferente y mi configuración se ve así:
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;
}
}
Intenté cambiar la ubicación de la API /api/
en lugar de /
pero luego no puedo acceder a mi aplicación.
No quiero servir archivos estáticos desde el nodo, así que no lo sugiera.
Respuesta1
Supongo que desea servir. http://app.site.com/api/xxx
Agregar un segundo bloque de ubicación para su /api/
ruta enviará cualquier URI que comience /api/
al proxy y cualquier otra cosa a su aplicación 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;
}
}
La configuración del proxy no eliminará /api/ de la ruta y el URI se presentará completo en su servidor de API. Esto está controlado por la barra diagonal final en proxy_pass http://localhost:3000/
. Referirse ahttps://stackoverflow.com/questions/22759345/nginx-trailing-slash-in-proxy-pass-urlpara más información sobre esto.