Как заменить http-адрес на https для Shiny App - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть приложение Shiny, размещенное в Digitalocean с веб-сервером под именем Nginx .Веб-адрес выглядит так:

http://www.exacmple.com/ShinyApp

Однако я хотел бы изменить http на https.т.е. все запросы к этому приложению будут перенаправлены на https: / / www.exacmple.com / ShinyApp

У меня уже установлен сертификат SSL с letsencrypt, а файл сертификата размещен по адресуниже адреса:

/etc/letsencrypt/live/example.com/fullchain.pem;
/etc/letsencrypt/live/example.com/privkey.pem;

В настоящее время мой файл прокси Nginx настроен следующим образом:

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
  map $http_upgrade $connection_upgrade {
      default upgrade;
      ''      close;
    }



server {
    listen 80 default_server;
    listen [::]:80 default_server;
        server_name example.com www.example.com;
    if ($http_host = example.com) {
            rewrite  (.*)  https://www.example.com$1;
          }



    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

location /ShinyApp/ {
      rewrite ^/ShinyApp/(.*)$ /$1 break;
      proxy_pass http://localhost:4242;    
      proxy_redirect http://localhost:4242/ $scheme://$host/ShinyApp/;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_read_timeout 20d;
      proxy_buffering off;
    }
}

Для реализации для https , Iдобавили этот файл, как показано ниже ( раздел )

location /ShinyApp/ {
      rewrite ^/ShinyApp/(.*)$ /$1 break;
      SSLEngine on
      ssl_certificate           /etc/letsencrypt/live/example.com/fullchain.pem;
       ssl_certificate_key       /etc/letsencrypt/live/example.com/privkey.pem;

      ProxyPreserveHost On
      proxy_pass http://localhost:4242;
      roxyPassReverse http://localhost:4242;
      proxy_redirect http://localhost:4242/ $scheme://$host/ShinyApp/;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_read_timeout 20d;
      proxy_buffering off;
    }

Однако указанное выше изменение не может выполнить https запрос.

Я ушелчерез различные предложения, доступные через Интернет (например, HTTPS для приложений Shiny? ), однако не удалось найти какое-либо работоспособное решение.

Любой указатель в правильном направлении был бы очень полезен.

Спасибо

1 Ответ

0 голосов
/ 19 декабря 2018

Обычной практикой для этого является использование двух серверных блоков:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    server_name example.com www.example.com;
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ... # root, index and other top-level directives here
    location /ShinyApp/ {
        # your backend configuration here
    }
}

Не используйте директивы ssl_certificate и ssl_certificate_key внутри блоков location, обратите внимание на контекст, в котором nginxДирективы могут или не могут быть использованы.SSLEngine, ProxyPreserveHost и ProxyPassReverse являются директивами apache, удалите их!Проверьте вашу конфигурацию с помощью nginx -t перед перезагрузкой nginx с новой конфигурацией.

...