我希望能夠從子資料夾存取我的 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有關此的更多資訊。