You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理下Plumber POST API返回404错误求助

Plumber API在Ubuntu 22.04升级+PHP安装后404故障排查

原本在DigitalOcean的Nginx上正常运行的Plumber API,在安装PHP 8.0.2并将Ubuntu升级至22.04(配置文件被覆盖重配)后失效。当前状态:

  • R进程已正常监听3000端口
  • myApi-plumber.service配置指向该端口
  • 本地直接访问http://127.0.0.1:3000返回404错误(预期是POST API的405 Method Not Allowed)
  • 未修改plumber.R文件,本地运行正常,排除代码问题
  • 已尝试:统一尾斜杠、重启Nginx、重启Droplet、重建环境、配置防火墙,均无效

相关配置信息

Nginx配置

版本:Nginx 1.18.0
/etc/nginx/sites-available/default内容:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;

        index index.php index.html;

        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }

        location /myApi/ {
                proxy_pass http://127.0.0.1:3000/;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Allow-Credentials' 'true';
                add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
                add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
}

本地curl测试结果

执行命令:curl -i http://127.0.0.1:3000
预期:返回405 - Method not allowed
实际返回:

HTTP/1.1 404 Not Found
Date: Fri, 27 Jan 2023 13:11:52 GMT
Access-Control-Allow-Origin: *
Content-Type: application/json
Content-Length: 36

前端POST请求情况

前端AJAX代码:

function foo(myCallback) {
    $.ajax({
        type: "POST",
        url: "http://XX.XX.XX.XX/myAPI/",
        data: myAPIString,
        dataType: "json",
        success: myCallback,
    })
}

浏览器返回:404 xhr错误

进程监听状态

执行命令:sudo lsof -i -P -n | grep LISTEN
输出:

R    717   root   15u  IPv4  XXXXX  0t0  TCP 127.0.0.1:3000

Systemd服务状态

plumber-API.service状态:

plumber-API.service - Plumber API
     Loaded: loaded (/etc/systemd/system/plumber-API.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2023-01-27 10:40:03 UTC; 2h 45min ago
   Main PID: 717 (R)
      Tasks: 4 (limit: 1131)
     Memory: 210.8M
     CGroup: /system.slice/plumber-myTree.service
             └─717 /usr/lib/R/bin/exec/R --no-echo --no-restore -e pr~+~<-~+~plumber::pr('/var/plumber/myApi/plumber.R');~+~pr$setDocs(FALSE);~+~~+~pr$run(port=3000)

Jan 27 10:40:03 ShakenPolygamy systemd[1]: Started Plumber API.
Jan 27 10:40:10 ShakenPolygamy Rscript[717]: Loading required package: maps
Jan 27 10:40:13 ShakenPolygamy Rscript[717]: Running plumber API at http://127.0.0.1:3000

排查与修复步骤

1. 检查Plumber API路由加载情况

  • 临时修改服务启动命令,去掉pr$setDocs(FALSE),重启服务后访问http://127.0.0.1:3000/__docs__,确认API路由是否正确加载
  • 直接访问API的具体端点(如http://127.0.0.1:3000/your-endpoint),验证是否能正常响应

2. 修复Nginx配置语法错误

当前Nginx配置的location /myApi/块未闭合(缺少}),会导致配置失效。修复后执行:

sudo nginx -t  # 验证配置语法
sudo systemctl restart nginx

同时补充完整代理头信息,确保Plumber能正确识别请求:

proxy_set_header Host $host:$server_port;
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;

3. 验证Plumber服务的文件路径与权限

  • 确认plumber.R文件存在且权限正确:ls -l /var/plumber/myApi/plumber.R,确保R进程用户有读取权限
  • 手动执行服务启动命令,查看控制台是否有加载错误:
    /usr/lib/R/bin/exec/R --no-echo --no-restore -e "pr <- plumber::pr('/var/plumber/myApi/plumber.R'); pr$setDocs(FALSE); pr$run(port=3000)"
    

4. 检查系统权限限制

  • 确认3000端口无其他进程占用:sudo ss -tulpn | grep 3000
  • 检查AppArmor/SELinux是否限制R进程网络访问:
    sudo aa-status
    sudo sestatus
    
    若启用,可临时关闭测试,或添加规则允许R进程监听端口。

5. 调整Nginx请求转发规则

若默认location /的try_files规则拦截请求,可修改为:

location / {
        try_files $uri $uri/ @proxy_api;
}

location @proxy_api {
        proxy_pass http://127.0.0.1:3000;
}

(注:此配置适用于API为站点主要服务的场景,否则保持原有/myApi/代理配置即可)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:45:59