RStudio服务器和Shiny Server Websocket错误400:Shiny Server的修复程序不适用于RStudio Server

时间:2018-03-13 14:14:20

标签: nginx websocket shiny rstudio

结论:我无法解释为什么我能够查看由Shiny Server托管的Shiny应用程序,但是当从RStudio Server启动时,相同的Shiny应用程序“灰显”。两者都托管在运行NGINX的CentOS 7服务器上。

背景:当我通过服务器本身的VM访问时,我始终能够从RStudio Server和Shiny Server启动应用程序。直到昨天,我无法使用任何方法通过非VM方式查看应用程序。在阅读了“灰显”应用程序的常见修复程序后,我设法让Shiny Server通过NGINX工作。以下是我在/etc/nginx/nginx.conf文件中添加/修改的推荐块:

(在服务器定义之前)

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

(在服务器定义内)

location /rstudio/ {
    rewrite ^/rstudio/(.*)\$ /\$1 break;
    proxy_pass http://127.0.0.1:8787;
    proxy_redirect http://127.0.0.1:8787/ \$scheme://\$host/rstudio/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade \$http_upgrade;
    proxy_set_header Connection \$connection_upgrade;
    proxy_read_timeout 20d;
}
location /shiny/ {
    rewrite ^/shiny/(.*)\$ /\$1 break;
    proxy_pass http://127.0.0.1:3838;
    proxy_redirect http://127.0.0.1:3838/ \$scheme://\$host/shiny/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade \$http_upgrade;
    proxy_set_header Connection \$connection_upgrade;
    proxy_read_timeout 20d;
}

我对这个问题的理解是,websocket握手花了太长时间,所以这些编辑延长了完成握手的时间。

Shiny Server现在托管我可以通过NGINX处理查看的应用程序,但我仍然从RStudio Server启动了一个“灰显”应用程序,并在Chrome的开发人员工具中出现此错误:

WebSocket connection to 'wss://my.domain.net/p/4448/websocket/' failed:
Error during WebSocket handshake: Unexpected response code: 400

这是我在Shiny Server托管应用程序时遇到的同类错误,但上面提到的更改解决了这个问题。

1 个答案:

答案 0 :(得分:0)

RStudio Server和Shiny Server如何处理相同的Shiny应用程序之间的行为差​​异源于每个程序首先启动的方式。两者都安装在一个企业系统上,该系统分别为RStudio和Shiny启动IP:8787或IP:3838。它们从未受到我的NGINX配置的影响,因此未应用nginx.conf文件中解决的websockets处理。通过IP / rstudio而不是IP访问RStudio服务器:8787强制在原始帖子中表示添加了NGINX的websocket处理。现在,我的应用程序通过RStudio Server和Shiny Server实现。