2013-08-07 41 views
2



我正在開發一個應用程序,用戶可以在其中創建自己的html模板並將它們發佈到web.Now當用戶單擊發布時我想創建主機他的網站上子域名(他選擇了一個名字)(例如:他將網站命名爲apple,我創建了一個子域apple.ABC.com)。
在應用程序中,單個用戶可以創建多個網站/模板。現在,我想將單個用戶網站存儲在單個存儲桶中。如果用戶有兩個模板例如:apple.com和berry.com,我有存儲桶中有兩個文件夾,每個網站都有一個文件夾。但是我瀏覽了S3存儲桶,發現我可以在存儲桶和網站上設置存儲規則。
我想知道我正在嘗試的是否可能,如果不能,我如何管理它,就好像我爲一個模板創建一個存儲桶一樣,我將很難跟蹤哪個用戶具有多少個模板,如同DB 1將不得不有多個條目。
我知道我將不得不使用AWS服務和API將模板存儲到S3,如果我可以在BUCKET中有多個網站,我很感興趣。在Amazon S3上的BUCKET中託管多個網站

編輯:想出一個解決方案使用代理服務器nginx的和更新的答案

回答

2

這是一個有點棘手,但doable.After一些研究,我發現了一個解決方案,可以work.Steps如下:。

  1. 我們需要一個代理服務器,以執行操作(例如: Nginx
  2. 我們需要對default.conf文件進行配置更改,以將請求代理到您擁有您網站的存儲桶。
  3. 這是conf文件:

    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地址爲@記錄。這將發送您的請求到正確的目的地,而不管您的URL中的www
5

要使用S3的靜態網站的功能,你只能映射每桶一個域。沒有辦法告訴域使用存儲桶的文件夾而不是存儲桶本身。