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

ShinyProxy配置子域名直访指定应用的Nginx反向代理问题

问题场景
  • 基于Docker + ShinyProxy部署的Shiny应用01_hello可通过serveripaddress:8080/app/01_hello正常访问
  • 需要配置子域名theapp.company.com,直接访问该域名即可打开目标应用,无需展示ShinyProxy应用列表页
  • 初始Nginx配置直接将根路径反向代理到http://localhost:8080/app/01_hello时访问报错,报错截图如下:
    subdomain-error
  • 将代理目标改为http://localhost:8080时,访问域名会先进入ShinyProxy全应用列表落地页,手动跳转到/app/01_hello才能正常使用应用,不符合预期

初始错误Nginx配置片段:

location / {
    proxy_pass          http://localhost:8080/app/01_hello;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 600s;

    proxy_redirect    off;
    proxy_set_header  Host              $http_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;
}
正确配置步骤

直接将proxy_pass指向应用子路径报错的核心原因是:ShinyProxy返回的静态资源、Websocket接口、重定向地址都默认携带/app/[应用名]前缀,未做路径重写时浏览器会从根路径请求这些资源,导致404或连接失败。需要同时调整ShinyProxy和Nginx两层配置:

1. 修改ShinyProxy配置

编辑ShinyProxy的application.yml配置文件,添加以下配置,指定默认落地页为目标应用,同时开启反向代理头识别:

server:
  forward-headers-strategy: framework
  servlet:
    context-path: /
proxy:
  landing-page: /app/01_hello
  hide-navbar: true # 单应用场景可选配置,隐藏顶部导航栏获得更纯净的应用体验

修改完成后重启ShinyProxy服务让配置生效。

2. 调整Nginx反向代理规则

更新子域名对应的Nginx配置,增加路径重写和重定向替换规则,保证所有请求正确转发到对应应用路径:

location / {
    # 将所有根路径请求重写到ShinyProxy的目标应用路径下
    rewrite ^/(.*)$ /app/01_hello/$1 break;
    proxy_pass          http://localhost:8080;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 600s;

    # 替换ShinyProxy返回的重定向地址,去掉应用路径前缀
    proxy_redirect ~^/app/01_hello/(.*)$ /$1;
    proxy_set_header  Host              $http_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;
}

配置保存后先执行语法校验,确认无误后重载Nginx:

# 校验配置语法
nginx -t
# 重载配置生效
nginx -s reload

配置生效后直接访问theapp.company.com即可直接打开01_hello应用,静态资源加载、Websocket连接、页面跳转都可正常运行。

扩展说明:如果需要在同一个ShinyProxy实例上给不同应用绑定独立子域名,只需要为每个子域名新增独立的Nginx server块,对应修改rewrite规则中的应用名、proxy_redirect匹配规则即可,无需调整ShinyProxy基础运行配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:27:26