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

使用NGINX作为R Shiny应用反向代理时返回404错误求助

核心原因

原生通过shiny::runApp(包括runExample)启动的单实例Shiny应用默认仅处理根路径/下的请求,你当前的Nginx配置会将/hello路径完整转发给后端3001端口的Shiny服务,服务端无对应路由就会返回404。
你之前用Shiny Server代理无异常,是因为Shiny Server原生支持多应用按路径区分,自带前缀路由处理逻辑,和原生启动的单实例服务运行逻辑不同。

可行解决方案

方案1:调整Nginx配置,重写转发路径

修改location规则,将路径中的/hello前缀剔除后再转发给Shiny服务,同时补充必要的请求头配置避免资源加载异常:

location /hello/ {
    # 剔除/hello前缀后转发
    rewrite ^/hello/(.*)$ /$1 break;
    proxy_pass http://localhost:3001;
    # 保留WebSocket相关配置
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    # 补充基础代理头
    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;
}

注意location后缀的/不要遗漏,保证路径匹配逻辑一致。

方案2:启动Shiny时直接指定路由前缀

无需修改Nginx配置,启动Shiny应用时增加appsPath参数,让服务本身适配/hello路径:

R -e "shiny::runExample('01_hello', host = '0.0.0.0', port = 3001L, appsPath = '/hello')"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:24:06