如何配置Nginx在通过Nginx URL访问服务时保留位置路径

问题描述 投票:0回答:1

我有一个托管在远程后端服务器上的微型网站,如 https://remote-server.mydomain.com/pdf

我正在尝试通过 Nginx 代理在不同的位置进行发布,以通过以下配置保持内容集中。

/etc/nginx/conf.d/backends.conf

upstream pdf-dev {
    zone pdf-dev-service 256k;
    server https://remote-server.mydomain.com;
}

/etc/nginx/conf.d/pdf.conf

location /dev/pdf {
    proxy_pass https://pdf-dev/pdf;

}

Nginx 可以通过 https://gateway.mydomain.com

访问

当我点击网址 https://gateway.mydomain.com/dev/pdf 我得到了微型网站。 但是,当我点击微型网站内的链接时,我会收到随后的 URL,其中会删除该位置中的“dev”部分。就像,如果我在加载的页面中单击“关于”,Nginx 会将其作为 https://gateway.mydomain.com/pdf/about 而不是 https://gateway.mydomain.com/dev /pdf/关于

任何保留路径/dev/pdf的方法。因为我们正在考虑利用 nginx 从其他环境(如 PATPROD)发布微型网站。

我尝试了不同堆栈帖子中可用的不同配置选项,但没有任何帮助。

nginx nginx-reverse-proxy
1个回答
0
投票

这是 nginx proxy_pass 指令的基础,我坚信你应该花至少一分钟的时间来“谷歌”它至少一次......

话虽这么说:

根据 此 nginx 文档页面

如果代理服务器的地址后跟 URI,并且 URI 与地址一起指定,则它将替换请求 URI 中与位置参数匹配的部分。如果指定的地址没有 URI,或者无法确定要替换的 URI 部分,则传递完整的请求 URI(可能经过修改)。

更好的是,再次根据 此文档页面

请求 URI 被传递到服务器,如下所示:

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

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

如果在没有指定 URI 的情况下指定 proxy_pass,则在处理原始请求时,请求 URI 将以与客户端发送的形式相同的形式传递到服务器,或者在处理更改的 URI 时传递完整规范化的请求 URI:

    location /some/path/ {
        proxy_pass http://127.0.0.1;
    }
© www.soinside.com 2019 - 2024. All rights reserved.