我希望能够从子文件夹访问我的 api 服务器(在节点上运行)/api/
并将所有其他请求发送到我的角度应用程序。
目前,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/
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了解更多信息。