/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
パスに 2 番目のロケーション ブロックを追加すると、で始まるすべての URI がプロキシに/api/
送信され、それ以外は Angular アプリに送信されると思います。/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詳細については、こちらをご覧ください。