带有 nginx 和 https 的闪亮服务器:应用程序的 404

Posted

技术标签:

【中文标题】带有 nginx 和 https 的闪亮服务器:应用程序的 404【英文标题】:Shiny server with nginx and https : 404 for apps 【发布时间】:2019-11-10 18:38:36 【问题描述】:

我的 URL 上的 Shiny Server 工作正常,但无法通过安全连接访问应用程序。

我使用 Certbot 安装 SSL 证书,并按照this guide 中的步骤 3 设置反向代理。

现在在浏览器中输入我的 URL 会直接将我带到带有默认“欢迎使用 Shiny Server!”的 https 站点。页面(即我的服务器 ip 在端口 3838)。所有的文字都在那里(“如果你看到这个页面,这意味着 Shiny Server 已经安装......等等”)。

问题在于示例应用没有显示 - 它们都返回“404 Not Found”。

我的 nginx 服务器文件(nginx/sites-available/shiny-server)如下所示:

server 
    listen 80 ;
    listen [::]:80 ;

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;
    server_name myURL.com; # managed by Certbot

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot

    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 / 
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;

        proxy_pass http://server.ip.address:3838/;      
        proxy_redirect http://server.ip.address:3838/ https://$host/;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_read_timeout 20d;
    


我已经尝试根据 Stack Overflow 和其他地方的其他答案(例如 here)以多种方式修改 location 部分,但没有解决问题。

我在nginx.conf的底部添加了以下内容:

# Map proxy settings for RStudio
    map $http_upgrade $connection_upgrade 
        default upgrade;
        '' close;
    

我的shiny-server.conf 看起来像这样(默认):

# Instruct Shiny Server to run applications as the user "shiny"
run_as shiny;

# Define a server that listens on port 3838
server 
  listen 3838;

  # Define a location at the base URL
  location / 

    # Host the directory of Shiny Apps stored in this directory
    site_dir /srv/shiny-server;

    # Log all Shiny output to files in this directory
    log_dir /var/log/shiny-server;

    # When a user visits the base URL rather than a particular application,
    # an index of the applications available in this directory will be shown.
    directory_index on;
  


如果我转到 http://my.server.ip:3838 或 http://myURL.com:3838,应用程序可以正常工作,但如果我转到 https://myURL.com 或 http://myURL.com 则无法正常工作(两种情况下都加载了闪亮的服务器页面,但示例应用程序是 404)。

【问题讨论】:

【参考方案1】:

好的,原来try_files $uri $uri/ =404; 行导致了问题。评论出来,一切都很好。

【讨论】:

以上是关于带有 nginx 和 https 的闪亮服务器:应用程序的 404的主要内容,如果未能解决你的问题,请参考以下文章

在闪亮的服务器不工作的情况下,在 NGINX 中将 HTTP 重定向到 HTTPS

如何根据带有闪亮元素的 R Markdown 文档中的条件禁用按钮?

带有 TableTools 和其他扩展的 R 闪亮数据表

是否可以使用 NGINX 将多个闪亮的应用程序部署到一台服务器?

带有可下载 md 报告的闪亮应用程序,错误:“pandoc:找不到数据文件”由闪亮服务器运行时

使用 nginx 反向代理的 Docker 容器内的闪亮服务器不会遵循 301 重定向