结论:我无法解释为什么我能够查看由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托管应用程序时遇到的同类错误,但上面提到的更改解决了这个问题。
答案 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实现。