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)
第三步:验证配置并重启服务
- 检查Nginx配置是否有语法错误:
sudo nginx -t
- 如果没问题,重启Nginx:
sudo systemctl restart nginx
- 重启你的Plumber API服务(确保新的配置生效)
- 访问
https://server.net/API/documentation/,应该就能看到加载了你自己API文档的Swagger UI了!
内容的提问来源于stack exchange,提问作者JDG




