Nginx: режим техобслуживания с “является разработчиком” проверка

Нет, это - игрушка для проигрывания вокруг с - хорошая все же.

Обратите внимание, что FreeBSD не имеет никакого стека OFED, который мог получить Ваше выполнение раздела IB...

1
задан 23 March 2013 в 10:02
2 ответа
  1. В разделе http (вне любого раздела сервера ) проверьте пользователя, является ли он разработчиком:

     map $ http_cookie $ isDevHack {
     дефолт "";
     ~ DEVELOPER_SECRET = 1010 "/ несуществующее-местоположение";
    }
    

    Пользователь является разработчиком, если у него был DEVELOPER_SECRET со значением 1010 в этом случае. Эта карта является общей для всех серверов в конфигурации.

  2. Добавьте раздел server с обработчиком ошибок 503:

     error_page 503 @main maintenance;
    location @main maintenance {
     перезаписать ^ (. *) $ /main maintenance-mode.html break;
    }
    

    maintenane-mode.html - это страница, отображаемая для пользователей, не являющихся разработчиками, в режиме обслуживания. Путь к файлу указан относительно каталог_документа текущего сервера .

  3. В разделе , которые должны быть защищены в режиме обслуживания, добавьте перед любыми правилами обычного режима :

     if (-f "$ isDevHack / home / site-home / maintenance") {
     возврат 503;
    }
    

    Если текущий пользователь является разработчиком, к проверенному имени файла будет добавлен префикс / non-existed-location и , если никогда не будет введен.

1
ответ дан 3 December 2019 в 21:35

У меня есть довольно простая настройка сервера, для которой конфигурация в конце ответ будет следующим:

  1. Если файл с именем MAINTENANCE существует на один уровень выше корневого, то сервер будет в режиме обслуживания. (Это тест -f .)

  2. За исключением того, что существует файл cookie с именем foo_dev со значением secret! , описанная выше проверка будет будут пропущены, и nginx будет обслуживать данные, как если бы сервер не был в режиме обслуживания. (Это тест $ cookie_foo_dev = "secret!" .)

Я пробовал с некоторыми настройками try_files и не обнаружил никаких проблем.

Вот это конфигурации.

server {
    # ... omitted stuff that does not pertain to the solution ...

    root <some path>;

    if ($cookie_foo_dev = "secret!") {
        break;
    }

    if ( -f $document_root/../MAINTENANCE) {
       return 503;
    }

    error_page 503 @maintenance;
    location @maintenance {
        rewrite ^(.*)$ /maintenance.html break;
    }

    location / {
        proxy_pass http://localhost:8000;
    }
}

Все входящие соединения должны использовать HTTPS, поэтому cookie никогда не передается в виде обычного текста через Интернет.

Я также установил сервер, на который nginx пересылает запросы, чтобы отображать большое жирное предупреждение, если cookie foo_dev настроен так, чтобы я по ошибке не забыл, что сайт находится в режиме обслуживания.

1
ответ дан 3 December 2019 в 21:35

Теги

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