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

如何在HTTPS站点中嵌入HTTP协议的Shiny Server应用?

解决方案

方案1:直接给Shiny Server配置SSL证书

让Shiny Server直接提供HTTPS服务,解决混合内容加载限制:

  • 申请SSL证书(比如免费的Let's Encrypt证书),将证书文件fullchain.pem和私钥文件privkey.pem上传到EC2实例的指定目录,例如/etc/ssl/certs/和/etc/ssl/private/
  • 修改Shiny Server配置文件/etc/shiny-server/shiny-server.conf,在server块中添加SSL配置:
    server {
      # 可选择将端口改为443,或保持3838并启用SSL
      listen 3838 ssl;
      ssl-certificate /etc/ssl/certs/fullchain.pem;
      ssl-key /etc/ssl/private/privkey.pem;
    
      # 保留原有应用路径配置
      location /allappfolders/app1/ {
        site_dir /srv/shiny-server/allappfolders/app1;
        log_dir /var/log/shiny-server;
      }
    }
    
  • 重启Shiny Server服务:sudo systemctl restart shiny-server
  • 登录AWS控制台更新EC2安全组规则,添加入站规则:允许HTTPS(TCP)访问对应端口(3838或443),来源按需设置为WordPress服务器IP或开放范围
  • 之后Shiny应用的访问地址变为https://ec2-3-134-88-235.us-east-2.compute.amazonaws.com:3838/allappfolders/app1/,可直接嵌入WordPress的iframe

方案2:用Nginx做反向代理(推荐,更灵活)

通过Nginx监听443端口提供HTTPS服务,将请求转发到本地3838端口的Shiny Server:

  • 在EC2实例安装Nginx:sudo apt update && sudo apt install nginx(RHEL/CentOS系统用yum install nginx)
  • 将SSL证书和私钥上传到EC2的/etc/nginx/ssl/目录
  • 创建Nginx配置文件/etc/nginx/sites-available/shiny-proxy.conf,添加反向代理规则:
    server {
      listen 443 ssl;
      server_name ec2-3-134-88-235.us-east-2.compute.amazonaws.com;
    
      ssl_certificate /etc/nginx/ssl/fullchain.pem;
      ssl_certificate_key /etc/nginx/ssl/privkey.pem;
    
      location /shiny-app/ {
        proxy_pass http://localhost:3838/allappfolders/app1/;
        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;
        # 适配Shiny的WebSocket连接需求
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
      }
    }
    
  • 启用配置文件:sudo ln -s /etc/nginx/sites-available/shiny-proxy.conf /etc/nginx/sites-enabled/
  • 测试配置合法性:sudo nginx -t,无问题则重启Nginx:sudo systemctl restart nginx
  • 更新EC2安全组规则,添加入站规则:允许HTTPS(TCP)访问443端口
  • 现在可通过https://ec2-3-134-88-235.us-east-2.compute.amazonaws.com/shiny-app/访问Shiny应用,将该HTTPS地址嵌入WordPress的iframe即可

注意事项

  • 若WordPress的SSL证书覆盖Shiny Server的域名(即EC2公网域名),可直接复用该证书文件
  • 安全组规则尽量限制来源IP范围,避免不必要的端口暴露

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 14:15:11