Shiny Server+Nginx+HTTPS配置后应用访问404问题求助
解决Shiny Server HTTPS访问应用404的问题
你的核心问题出在Nginx配置里的try_files指令,它会优先在本地文件系统里查找请求路径,找不到就直接返回404,根本没把请求转发到Shiny Server;另外反向代理缺少几个关键请求头,也会导致Shiny Server无法正确解析请求路径。
修复后的Nginx配置
修改/etc/nginx/sites-available/shiny-server文件,调整配置如下:
server { listen 80 ; listen [::]:80 ; server_name myURL.com; # 把所有HTTP请求永久重定向到HTTPS(推荐做法) return 301 https://$host$request_uri; } # 单独处理HTTPS请求 server { listen [::]:443 ssl ipv6only=on; listen 443 ssl; server_name myURL.com; # Certbot自动生成的SSL配置保留不动 ssl_certificate /etc/letsencrypt/live/myURL.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/myURL.com/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 location / { # 移除try_files,让所有请求直接转发到Shiny Server proxy_pass http://server.ip.address:3838/; proxy_redirect off; proxy_http_version 1.1; # 添加关键请求头,确保Shiny Server正确识别请求 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_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 20d; } }
关键修改点说明
- 移除
try_files指令:这是导致404的直接原因——原来的配置会先去/var/www/html下找请求路径,找不到就直接返回404,完全没触发反向代理转发到Shiny Server。 - 拆分HTTP/HTTPS server块:把HTTP请求单独做301重定向,既符合安全规范,也让配置逻辑更清晰。
- 补充反向代理请求头:
Host $host:让Shiny Server知道用户实际访问的域名,避免路径解析错误X-Forwarded-Proto $scheme:告诉Shiny Server当前请求是通过HTTPS发起的- 其他头用于传递客户端真实IP,方便日志排查和应用调试
验证步骤
- 先检查Nginx配置是否合法:
sudo nginx -t - 配置没问题的话,重启Nginx和Shiny Server:
sudo systemctl restart nginx sudo systemctl restart shiny-server - 现在访问
https://myURL.com,应该能正常看到Shiny应用列表,点击示例应用也不会再返回404了。
你的shiny-server.conf默认配置没问题(HTTP访问正常已经验证过),不需要修改。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

