2


我正在开发一个应用程序,用户可以在其中创建自己的 html 模板并将它们发布到网络。现在,当用户单击发布时,我想用他选择的名称在子域上创建托管他的网站。(例如:他为网站命名苹果,我创建了一个子域 apple.ABC.com)。
在应用程序中,单个用户可以创建多个网站/模板。现在,我想将单个用户的网站存储在一个存储桶中。如果用户有两个模板例如:apple.com 和 berry.com,我在桶,每个网站一个。但是我通过了S3桶,我发现我可以在桶和网站上设置托管规则。
我想了解我正在尝试的内容是否可行,如果不是,我该如何管理它,就像我为一个模板创建一个存储桶一样,我将很难跟踪哪个用户拥有多少个模板,就像我将拥有的数据库中一样有多个条目。
我知道我将不得不使用 AWS 服务和 API 将模板存储到 S3,如果我可以在一个桶中拥有多个网站,我很感兴趣。

编辑:想出一个使用代理服务器 nginx 的解决方案并更新了答案

4

2 回答 2

4

要使用 s3 的静态网站功能,每个存储桶只能映射一个域。没有办法告诉域使用存储桶的文件夹而不是存储桶本身。

于 2013-08-07T12:51:06.200 回答
3

这有点棘手但可行。经过一番研究,我找到了一个可行的解决方案。步骤如下:

  1. 我们需要一个代理服务器来执行操作。(例如:Nginx
  2. 我们需要对 default.conf 文件进行配置更改,以将请求代理到您拥有网站的存储桶。
  3. 这是配置文件:

    server {
        # Listen on port 80 for all IPs associated with your machine
        listen 80;
    
        # Catch all other server names
        server_name _;
    
        # This code gets the host without www. in front and places it inside
        # the $host_without_www variable
        # If someone requests www.coolsite.com, then $host_without_www will have the value coolsite.com
        set $host_without_www $host;
        if ($host ~* www\.(.*)) {
            set $host_without_www $1;
    
        }
    
        location / {
            # This code rewrites the original request, and adds the host without www in front
            # E.g. if someone requests
            # /directory/file.ext?param=value
            # from the coolsite.com site the request is rewritten to
            # /coolsite.com/directory/file.ext?param=value
            set $foo 'http://sites.abcd.com';
            # echo "$foo";
            rewrite ^(.*)$ $foo/$host_without_www$1 break;
    
    
            # The rewritten request is passed to S3
            proxy_pass http://sites.abcd.com;
            include /etc/nginx/proxy_params;
        }
    }
    
  4. 现在在您的 DNS 设置中将您的 CNAME 更改为您的代理服务器地址(类似于router.abcd.com)。代理服务器将接受您的请求并将其转发到托管您的站点的 S3 存储桶。

  5. 此外,您可以使用wwwizer.com的 IP 地址进行记录。@这会将您的请求发送到正确的目的地,而与www您的 URL 中的地址无关。
于 2013-12-20T04:49:41.873 回答