R/Plumber:通过 Nginx 反向代理重新路由 Swagger UI

JDG*_*JDG 5 r nginx swagger plumber

背景

我有一个远程服务器,通过 Plumber 在该服务器上运行 R API 服务。从我可以从外部调用我的服务的意义上来说,它是完全可操作的。

我正在使用 Ubuntu/Nginx 反向代理设置。Plumber 服务正在侦听端口 1163。我随后实现了以下 Nginx 重新路由,以便 API 侦听https://server.net/API/

location /API/ {
 proxy_pass http://localhost:1163/;
 proxy_redirect http://localhost:1163/ $scheme://$host/;
}
Run Code Online (Sandbox Code Playgroud)

这工作正常。现在,默认情况下,Swagger UI 会监听

http://127.0.0.1:1163/__swagger__/
Run Code Online (Sandbox Code Playgroud)

由于上面的配置,这意味着我可以成功访问 Swagger UI

https://server.net/API/__swagger__/
Run Code Online (Sandbox Code Playgroud)

问题

我想配置 Nginx 以便 Swagger UI 监听https://server.net/API/documentation/。我尝试了以下嵌套 Nginx 配置:

location /API/ {
 proxy_pass http://localhost:1163/;
 proxy_redirect http://localhost:1163/ $scheme://$host/;

 location /API/documentation/ {
 proxy_pass http://localhost:1163/__swagger__/;
 proxy_redirect http://localhost:1163/__swagger__/ $scheme://$host/;
 }

}
Run Code Online (Sandbox Code Playgroud)

现在,在浏览器中输入所需的 URL https://server.net/API/documentation/时,我检索 Swagger 界面,但它返回以下错误代码:

招摇错误

显然,Nginx 重定向期间解析了错误的 swagger URL。考虑到 url 应该说明这一点,这一点很清楚

https://server.net/API/swagger.json?schemes=https&host=server.net&path=/API/
Run Code Online (Sandbox Code Playgroud)

代替

http://petstore.swagger.io/v2/swagger.json
Run Code Online (Sandbox Code Playgroud)

如何确保在 Nginx 重定向期间将正确的 URL 解析到 Swagger UI?祝一切顺利,J.