如何在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
相关产品推荐
相关产品推荐

