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

树莓派Nginx反向代理配置HTTPS RStudio/Shiny Server及问题排查

解决方案:修正Nginx反向代理配置以适配RStudio和Shiny Server

我仔细看了你的配置文件,发现几个关键问题导致了重定向异常,下面是修正后的完整配置,以及每个修改点的详细说明:

修正后的/etc/nginx/conf.d/rstudio_shiny.conf

server {
    if ($host = code.example.blog) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80 ;
    listen [::]:80 ;
    server_name code.example.blog;
}

server {
    access_log /var/log/nginx/code.example.blog;
    # 注释默认根目录配置,避免访问根路径跳Nginx欢迎页(可根据需求调整)
    # root /var/www/html;
    # index index.html index.htm index.nginx-debian.html;

    listen 443 ssl;
    listen [::]:443 ssl;
    # 移除default_server标记(若有其他域名HTTPS配置,避免冲突)
    ssl_certificate /etc/letsencrypt/live/code.example.blog/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/code.example.blog/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    server_name code.example.blog;

    # 自定义根路径行为:可选返回404或重定向到指定服务
    location / {
        return 404;
        # 若想重定向到RStudio,取消下面注释:
        # return 301 $scheme://$host/rstudio/;
    }

    location /rstudio/ {
        rewrite ^/rstudio/(.*)$ /$1 break;
        proxy_pass http://MY.PUB.IP:8787;
        # 修正重定向规则,覆盖RStudio可能生成的错误跳转地址
        proxy_redirect http://MY.PUB.IP:8787/ $scheme://$host/rstudio/;
        proxy_redirect http://$host/ $scheme://$host/rstudio/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        # 核心:设置Host头,让RStudio识别正确的请求域名
        proxy_set_header Host $host;
        # 传递原始请求的IP和协议信息
        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;
        proxy_read_timeout 20d;
    }

    location /shiny-admin/ {
        rewrite ^/shiny-admin/(.*)$ /$1 break;
        proxy_pass http://MY.PUB.IP:3838;
        # 修正笔误:将错误的8787端口改为3838
        proxy_redirect http://MY.PUB.IP:3838/ $scheme://$host/shiny-admin/;
        proxy_redirect http://$host/ $scheme://$host/shiny-admin/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        # 同样设置Host和必要请求头
        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;
        proxy_read_timeout 20d;
        proxy_buffering off;
    }
}

关键修改点说明

  1. 解决RStudio重定向到公网IP的问题:

    • 添加proxy_set_header Host $host;:这是核心修复!RStudio Server会根据请求的Host头生成重定向URL,之前未设置时,它会使用后端的公网IP和端口,导致跳转到http://<你的公网IP>:8787。设置后,RStudio会生成基于code.example.blog的合法重定向地址。
    • 补充proxy_redirect http://$host/ $scheme://$host/rstudio/;:覆盖RStudio可能发送的根路径重定向,确保所有跳转都指向/rstudio/子路径。
  2. 修复Shiny Server配置笔误:

    • 将proxy_redirect中的http://MY.PUB.IP:8787/改为http://MY.PUB.IP:3838/:之前的笔误会导致Shiny的重定向指向错误端口,完全无法正常访问。
  3. 优化根路径访问行为:

    • 注释掉默认的root和index配置,避免访问https://code.example.blog时跳转到Nginx欢迎页。你可以选择返回404,或者重定向到/rstudio/(取消注释对应行即可)。
  4. 移除default_server标记:

    • 若你的Nginx还需要处理其他域名的HTTPS请求,default_server会导致所有未匹配的HTTPS请求都落到这个块,建议移除以避免冲突。

关于Shiny应用部署的支持

修正后的配置完全支持Shiny应用部署:

  • 已配置proxy_http_version 1.1、Upgrade和Connection头,满足Shiny Server的WebSocket通信需求(Shiny依赖WebSocket实现实时交互功能)。
  • proxy_buffering off确保Shiny的实时输出不会被Nginx缓冲,能即时推送给用户。
  • 添加的X-Forwarded-Proto等头让Shiny识别原始请求为HTTPS,避免生成HTTP格式的资源链接。

修改完成后,执行sudo nginx -t检查配置语法是否正确,确认无错误后执行sudo systemctl reload nginx使配置生效即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:15:53