You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Nginx反向代理配置:将Plumber的Swagger UI映射到自定义路径

解决Plumber Swagger UI路径映射与JSON加载问题

我来帮你搞定这个Swagger UI的配置问题!你遇到的核心问题有两个:一是把/__swagger__/映射到/documentation/,二是让Swagger UI加载正确的API文档JSON而不是默认的petstore地址。下面分步骤给你解决:

第一步:调整Nginx反向代理配置

首先要确保Nginx能把/API/documentation/的请求正确转发到Plumber的/__swagger__/端点,同时传递正确的请求头(让Plumber识别反向代理后的HTTPS环境)。

打开你的Nginx配置文件(通常在/etc/nginx/sites-available/server.net或者类似路径),修改或添加以下location块:

# 基础API反向代理(保持你原来的配置,确保这部分正确)
location /API/ {
    proxy_pass http://127.0.0.1:1163/;
    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_set_header X-Forwarded-Proto $scheme; # 关键:告诉Plumber当前用的是HTTPS
}

# Swagger UI路径映射配置
location /API/documentation/ {
    # 把请求路径中的documentation替换为Plumber默认的__swagger__
    rewrite ^/API/documentation/(.*)$ /__swagger__/$1 break;
    proxy_pass http://127.0.0.1:1163;
    # 同样传递必要的请求头
    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_set_header X-Forwarded-Proto $scheme;

    # 可选:如果不想修改Plumber脚本,用Nginx替换Swagger UI里的默认JSON地址
    sub_filter 'http://petstore.swagger.io/v2/swagger.json' 'https://server.net/API/swagger.json?schemes=https&host=server.net&path=/API/';
    sub_filter_once off;
    proxy_set_header Accept-Encoding ""; # 必须禁用压缩,否则sub_filter无法生效
}

第二步:(推荐)修改Plumber脚本指定Swagger JSON地址

比起Nginx的字符串替换,直接在Plumber里配置Swagger UI的目标JSON地址更可靠,避免后续Swagger UI更新导致替换失效。

在你的Plumber API脚本里,初始化plumber对象时添加swagger_url参数:

# 加载plumber包
library(plumber)

# 加载你的API定义
pr <- plumb("your_api_file.R")

# 设置Swagger UI加载的JSON地址
pr$setDocs(swagger_url = "https://server.net/API/swagger.json?schemes=https&host=server.net&path=/API/")

# 启动服务
pr$run(port = 1163)

第三步:验证配置并重启服务

  1. 检查Nginx配置是否有语法错误:
sudo nginx -t
  1. 如果没问题,重启Nginx:
sudo systemctl restart nginx
  1. 重启你的Plumber API服务(确保新的配置生效)
  2. 访问https://server.net/API/documentation/,应该就能看到加载了你自己API文档的Swagger UI了!

内容的提问来源于stack exchange,提问作者JDG

火山引擎 最新活动