Nginx proxy_pass 到远程文件

Nginx proxy_pass 到远程文件

我有一台 nginx 服务器,我想将以 开头的任何路由指向/app特定文件。这是一个单页应用程序,因此/app/some/long/route应该只返回相同的 index.html 文件。

location /app {
    proxy_pass http://my-cdn-host.com/index.html;
}

我有两个问题:

  1. 我很确定这确实是一个不需要的/app/very/long/urlproxy_passhttp://my-cdn-host.com/index.html/app/very/long/url
  2. 根据日志,我不清楚代理 URL 到底是什么,所以我甚至无法完全确认上述观点。$proxy_host而且$upstream_addr我也没有完整的信息

最后一点:即使文件是http://my-cdn-host.com/index.html,我也无法仅使用来访问它http://my-cdn-host.com/index.html需要是明确的路径。

有没有办法为我的位置提供单个远程文件?谢谢

答案1

这正是proxy_pass指令中描述的预期行为文档

如果该proxy_pass指令以 URI 指定,则当请求传递到服务器时,与位置匹配的规范化请求 URI 的部分将被该指令中指定的 URI 替换:

location /name/ {
    proxy_pass http://127.0.0.1/remote/;
}

您需要使用另一个proxy_pass行为特征,如下所述:

在某些情况下,无法确定要替换的请求 URI 的部分:

...

  • 当使用指令在代理位置内更改 URI 时rewrite,相同的配置将用于处理请求(break):

    location /name/ {
        rewrite    /name/([^/]+) /users?name=$1 break;
        proxy_pass http://127.0.0.1;
    }
    

    在这种情况下,指令中指定的 URI 将被忽略,并且完整更改的请求 URI 将传递给服务器。

使用以下位置块:

location /app {
    rewrite ^ /index.html break;
    proxy_pass http://my-cdn-host.com;
}

相关内容