Эластичный Лак чистки Бобового стебля через экземпляры

Я немного застреваю с тем, как лучше всего очистить Лак через все мои экземпляры на Эластичном Бобовом стебле - к сожалению, я не являюсь самым хорошо осведомленным с AWS.

Я хотел бы сохранить вещи простыми относительно набора, таким образом, я решил иметь кэш Лака на каждом сервере, а не отдельных серверах Лака.

Теперь, если у меня есть сайт, который может очистить кэш, он прошел бы подсистему балансировки нагрузки и только поразил бы один сервер. Оттуда я предполагаю, что мог затем поразить досягаемость своих экземпляров, но на том этапе я понятия не имею, что дюйм/с каждый, который экземпляры. Таким образом, я должен был бы использовать AWS Cli для захвата всех экземпляров, затем инициировали ясное на каждом? Или есть ли путь, когда определенный URL называют (возможно, с заголовком), что он достигает всех экземпляров позади той подсистемы балансировки нагрузки.

Я был бы очень признателен за некоторое руководство на этом.

Ниже моя конфигурация, одной вещью, которая могла бы выглядеть немного странной, является X-Purge-Token - я решил, что это могло бы иметь смысл, если запрос прибывает из подсистемы балансировки нагрузки или другого, экземпляры проверяют заголовок на маркер прежде, чем позволить чистку. Я первоначально запланировал использовать X-Forwarded-For, но потому что изменение дюйм/с я не был уверен оптимальный маршрут для этого.

option_settings:
  - namespace: aws:elasticbeanstalk:application:environment
    option_name: COMPOSER_HOME
    value: /root

  - option_name: APP_ENV
    value: placeholder
  - option_name: APP_KEY
    value: placeholder

packages:
  yum:
    varnish: []

files:
  "/etc/varnish/default.vcl":
    owner: root
    group: root
    content: |
      backend default {
          .host = "127.0.0.1";
          .port = "8080";
      }

      acl elb {
        "172.31.0.0"/20;
        "172.31.16.0"/20;
        "172.31.32.0"/20;
      }

      acl purge {
        "localhost";
        "127.0.0.1";
        "::1";
        "86.19.111.22";
        "213.106.111.22";
      }

      sub vcl_recv {
        if (req.request == "PURGE") {

          set req.http.xff = regsub(req.http.X-Forwarded-For, "^[^,]+.?.?(.*)$", "\1");

          if(client.ip ~ elb) {
            if (req.http.X-Purge-Token == "tFjn3MnrunWzi49x") {
              return (lookup);
            }
          } else {
            if (client.ip ~ purge) {
              return (lookup);
            }
          }

           error 405 "Not allowed.";
        }
        if (!(req.url ~ "(preview=true|wp-login|wp-admin)")) {
          unset req.http.cookie;
        }
      }

      sub vcl_fetch {
        if (beresp.ttl == 120s) {
          set beresp.ttl = 24h;
        }

        if (!(req.url ~ "(preview=true|wp-login|wp-admin)")) {
          unset beresp.http.set-cookie;
        }
      }

      sub vcl_hit {
        if (req.request == "PURGE") {
          if(req.http.X-Purge-Method == "regex") {
            ban("req.url ~ " + req.url + " && req.http.host ~ " + req.http.host);
          }
          purge;
          error 200 "Purged.";
        }
      }

      sub vcl_miss {
        if (req.request == "PURGE") {
          if(req.http.X-Purge-Method == "regex") {
            ban("req.url ~ " + req.url + " && req.http.host ~ " + req.http.host);
          }
          purge;
          error 200 "Purged.";
        }
      }



commands:
  001_update_composer:
    command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update
  010_httpd.conf:
    command: "sed -i 's/Listen 8080/Listen 80/g' /etc/httpd/conf/httpd.conf"
  011_httpd.conf:
    command: "sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf"
  040_varnish:
    command: "sed -i 's/VARNISH_LISTEN_PORT=6081/VARNISH_LISTEN_PORT=80/g' /etc/sysconfig/varnish"
  041_varnish:
    command: "sed -i 's/VARNISH_ADMIN_LISTEN_PORT=6082/VARNISH_ADMIN_LISTEN_PORT=2000/g' /etc/sysconfig/varnish"

container_commands:
   "1-storage-permissions":
      command: "mkdir -p public/content/uploads && chmod -R 755 public/content/uploads"
   "2-install-dependencies":
      command: "/usr/bin/composer.phar install"

services:
  sysvinit:
    varnish:
      enabled: true
      ensureRunning: true
0
задан 5 August 2015 в 14:12
1 ответ

Я думаю, что лучше всего использовать интерфейс командной строки.Пометьте свои среды Elastic Beanstalk соответствующими тегами, которые можно использовать для идентификации экземпляров EC2. Например, теги EnvironmentName и ServiceName .

Затем вы можете выполнить следующий вызов интерфейса командной строки, чтобы получить частные IP-адреса этих экземпляров, которые затем можно использовать для отправки отдельных запросов на очистку.

aws ec2 describe-instances \
    --region eu-west-1 \
    --filter Name=tag:EnvironmentName,Values=production \
    --filter Name=tag:ServiceName,Values=cache \
    --query "Reservations[].Instances[].PrivateIpAddress"

Конечно, вам нужно будет заменить значения региона, EnvironmentName и ServiceName, чтобы он соответствовал вашей настройке.

0
ответ дан 24 November 2019 в 08:19

Теги

Похожие вопросы