如何将 Shiny App 的 http 地址替换为 https
How to replace http address to https for Shiny App
我在 Digitalocean 中托管了一个闪亮的应用程序,Web 服务器为 Nginx。网址看起来像
http://www.exacmple.com/ShinyApp
不过我希望能将 http 更改为 https。即所有对此应用程序的请求将被路由到 https://www.exacmple.com/ShinyApp
我已经从 letsencrypt
安装了 SSL 证书,证书文件位于以下地址:
/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;
}
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/(.*)$ / 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,我已将此文件附加如下(位置部分)
location /ShinyApp/ {
rewrite ^/ShinyApp/(.*)$ / 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 请求。
我浏览了 Web 上可用的各种建议(例如 ),但未能找到任何可行的解决方案。
任何指向正确方向的指示都会非常有帮助。
谢谢,
通常的做法是使用两个服务器块:
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
}
}
不要在 location
块中使用 ssl_certificate
和 ssl_certificate_key
指令,注意可能会或可能不会使用 nginx 指令的上下文。 SSLEngine
、ProxyPreserveHost
和 ProxyPassReverse
是 apache 指令,删除它们!在使用新配置重新加载 nginx 之前,使用 nginx -t
测试您的配置。
我在 Digitalocean 中托管了一个闪亮的应用程序,Web 服务器为 Nginx。网址看起来像
http://www.exacmple.com/ShinyApp
不过我希望能将 http 更改为 https。即所有对此应用程序的请求将被路由到 https://www.exacmple.com/ShinyApp
我已经从 letsencrypt
安装了 SSL 证书,证书文件位于以下地址:
/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;
}
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/(.*)$ / 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,我已将此文件附加如下(位置部分)
location /ShinyApp/ {
rewrite ^/ShinyApp/(.*)$ / 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 请求。
我浏览了 Web 上可用的各种建议(例如 ),但未能找到任何可行的解决方案。
任何指向正确方向的指示都会非常有帮助。
谢谢,
通常的做法是使用两个服务器块:
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
}
}
不要在 location
块中使用 ssl_certificate
和 ssl_certificate_key
指令,注意可能会或可能不会使用 nginx 指令的上下文。 SSLEngine
、ProxyPreserveHost
和 ProxyPassReverse
是 apache 指令,删除它们!在使用新配置重新加载 nginx 之前,使用 nginx -t
测试您的配置。