如何为静态网页和闪亮的服务器应用程序定义一个域?

How to define one domain for both static webpage and shiny server app?

我有一个闪亮的服务器应用程序,使用 aws ec2 和 route53、nginx 和 certbot for ssl。现在我的域名被应用程序使用。 我想要一个静态主页来欢迎用户并提供登录应用程序的权限。 目的是有一个主页介绍,所以它可以被 google 索引。 我可以为此使用一个域吗(应用程序和网页)? 为此,我应该如何定义和管理我的域?

希望我的问题足够清楚。 提前致谢

我忘了说我的静态网站在 aws s3 bucket 上(而不是在 ec2 +nginx 服务器上)。 我不确定定义 nginx.conf 的语法。以下是 nginx.conf 现在正常工作的方式:

server {

 listen 80;
 listen [::]:80;

 # redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
  return 301 https://$host$request_uri;
}

server {
  # listen 443 means the Nginx server listens on the 443 port.
  listen 443 ssl http2;
  listen [::]:443 ssl http2;

  # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
  ssl_certificate /etc/letsencrypt/live/app.mydomain/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/app.mydomain/privkey.pem;
  ssl_session_timeout 1d;
  ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
  ssl_session_tickets off;

  # curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam.pem
  ssl_dhparam /etc/nginx/snippets/dhparam.pem;
  # intermediate configuration
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES12>
  ssl_prefer_server_ciphers off;

  # HSTS (ngx_http_headers_module is required) (63072000 seconds)
  add_header Strict-Transport-Security "max-age=63072000" always;

  # OCSP stapling
  ssl_stapling on;
  ssl_stapling_verify on;

  # verify chain of trust of OCSP response using Root CA and Intermediate certs
  ssl_trusted_certificate /etc/letsencrypt/live/app.mydomain/chain.pem;

  # Replace it with your (sub)domain name.
  server_name app.mydomain;
  # The reverse proxy, keep this unchanged:
  location / {
      proxy_pass http://localhost:3838;
      proxy_redirect http://localhost:3838/ $scheme://$host/;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_read_timeout 20d;
      proxy_buffering off;
  }
}

如果我理解@AlexStoneham,我需要添加类似的内容:

    server{
      server_name mydomain;
    
      location / {
        proxy_pass $scheme://$host.s3-website-eu-central-1.amazonaws.com$request_uri
      }
    } 

但是添加不起作用。我应该向它添加 443 侦听器块并重新添加 ssl 证书吗?

app.mydomain 适用于闪亮的应用程序,现在运行良好。 mydomain 应该指向 s3 静态网页。

谢谢

在你的 nginx conf 中使用 nginx 服务器块 和子域与您的 route53 conf

利用像 app.yourdomain.com 这样的子域转到配置有 nginx 的 shiny 应用程序,以便在一个服务器块中为 shiny 应用程序提供服务。设置另一个子域,如 www.yourdomain.com 以转到配置了 nginx 的静态页面,以在另一个服务器块中为静态页面提供服务。

参见: https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-routing-traffic-for-subdomains.html 有关 route53 的详细信息

和: https://www.nginx.com/resources/wiki/start/topics/examples/server_blocks/ 有关 nginx 的详细信息

nginx.conf 没问题,不需要添加任何东西,因为静态网页在 s3 存储桶上而不是 nginx/ec2。

问题是,在我的多次尝试中,我制作了一个与 s3 存储桶同名的“mydomain”的 certbot 证书。 当尝试通过 route53(s3 端点是 http 而不是 https)link 我的带有该域名的 s3 存储桶时,这发生了冲突并产生了问题。

解决方案是从我的 ec2 服务器(带有 nginx)中删除特定的 ssl 证书:

$ sudo certbot certificates #shows the exist certificates
$ sudo certbot delete #choose the certificate to delete, in my case: "mydomain"