r - Nginx:代理传递/代理重定向到 Shiny 的 Web 应用程序

标签 r docker nginx shiny

我们正在尝试更新我们的内部服务器基础架构,并通过 Nginx 服务器代理对我们 R Shiny 网络服务器的所有访问。我能够从 Shiny 的服务器获得响应,但我无法通过 Nginx 服务器获得相关文件,如 css/js。

设置:

  • 2 个 docker 容器(1 个用于托管 nginx,1 个运行 R 用于 Shiny 的应用程序)

  • 两个 docker 容器都是 docker 网络的成员

  • shiny server监听7676端口(内部ip-address 172.18.0.3)

  • nginx 服务器正在托管一些带有 iFrame 的静态 html 文件(遗留的,无法下车),它应该显示 shiny 服务器的内容

  • 访问 nginx-server/QueryLandscape.html 加载带有 iFrame 的页面 <iframe src="ilandscape"></iframe>

  • iFrame 有效:它加载 R-shiny 应用程序的静态部分,但不加载相关的 JS/CSS/....(例如 http://nginx-server:8001/ilandscape/shared/shiny.css)

  • 在 nginx-docker 容器中我可以访问这个 css 文件 wget 172.18.0.3:7676/shared/shiny.css

Nginx.conf

location /ilandscape/ {
    proxy_pass http://172.18.0.3:7676/;
    #proxy_redirect http://172.18.0.3:7676/ $scheme://$host/;

    # websocket headers
    proxy_set_header Upgrade $http_upgrade;

    proxy_http_version 1.1;
    proxy_read_timeout 20d;
    proxy_set_header Host $host;
}

我在我的 nginx conf 中缺少什么来代理/重定向 http://nginx-server:8001/ilandscape/shared/shiny.css --> 172.18.0.3:7676/shared/shiny.css

感谢您的帮助, 托比

最佳答案

看起来充当浏览器的 iframe 正在接收主机名而不是资源的完整路径。您能否设置以下 ReverseProxy header 并试一试:

proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

基本上您现在有一个代理,我们也需要一个反向代理。让我知道这是否有效。

关于r - Nginx:代理传递/代理重定向到 Shiny 的 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51269677/

相关文章:

RStudio : copy single dataframe from one project folder to another?

linux - 如何使用默认 R 安装通过 conda 安装 rpy2

mongodb - Node.js 应用程序无法使用 Kubernetes 连接到 MongoDB Docker 容器

Nginx Controller 客户端身份验证 optional_no_ca 不起作用

r - Conda 构建 R 包在 MacOS Mojave 上的 C 编译器问题上失败

xml - 使用命名空间在 R 中创建 XML

docker - 我如何在 docker 构建过程中传递参数或绕过它?

ruby - Docker for Mac - mkmf.rb 找不到 ruby​​ 的头文件

apache - 为什么 laravel homestead 不运行 Apache

ruby-on-rails - 欺骗 Rails 应用程序使其认为它在不同的端口上