Размещение нескольких веб-сайтов в BUCKET на Amazon S3


Я работаю над приложением, в котором пользователь может создавать свои собственные HTML-шаблоны и публиковать их в Интернете. Теперь, когда пользователь нажимает кнопку "Опубликовать", я хочу создать хост своего веб-сайта на поддомене с именем, которое он выбирает. (Пример: он называет сайт яблоком, я создаю поддомен apple.ABC.com).
В приложении один пользователь может создавать несколько веб-сайтов/шаблонов. Теперь я хочу хранить веб-сайты одного пользователя в одном сегменте. Если у пользователя есть два шаблона Ex: apple.com и berry.com, у меня есть две папки в корзине, по одной для каждого веб-сайта. Но я просмотрел корзину S3 и обнаружил, что могу установить хостинг правила для корзины и веб-сайта.
Я хотел понять, возможно ли то, что я пытаюсь сделать, и если нет, то как я могу управлять этим, если я создаю одну корзину для одного шаблона, мне будет сложно отследить, какая у пользователя есть сколько шаблонов, поскольку в БД мне нужно будет иметь несколько записей.
Я знаю, что мне придется использовать сервисы AWS и API для хранения шаблонов в S 3. Меня интересует, могу ли я иметь несколько веб-сайтов в ВЕДРО.

EDIT: нашел решение с использованием прокси-сервера nginx и обновил ответ


person coderunner    schedule 07.08.2013    source источник


Ответы (2)


Чтобы использовать функцию статического веб-сайта s3, вы можете сопоставить только один домен для каждого сегмента. Невозможно указать домену использовать папку ведра вместо самого ведра.

person datasage    schedule 07.08.2013

Это немного сложно, но выполнимо. После некоторых исследований я нашел решение, которое может работать. Шаги следующие:

  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.
person coderunner    schedule 20.12.2013