Нет, это - игрушка для проигрывания вокруг с - хорошая все же.
Обратите внимание, что FreeBSD не имеет никакого стека OFED, который мог получить Ваше выполнение раздела IB...
В разделе http
(вне любого раздела сервера
) проверьте пользователя, является ли он разработчиком:
map $ http_cookie $ isDevHack {
дефолт "";
~ DEVELOPER_SECRET = 1010 "/ несуществующее-местоположение";
}
Пользователь является разработчиком, если у него был DEVELOPER_SECRET
со значением 1010
в этом случае. Эта карта является общей для всех серверов в конфигурации.
Добавьте раздел server
с обработчиком ошибок 503:
error_page 503 @main maintenance;
location @main maintenance {
перезаписать ^ (. *) $ /main maintenance-mode.html break;
}
maintenane-mode.html
- это страница, отображаемая для пользователей, не являющихся разработчиками, в режиме обслуживания. Путь к файлу указан относительно каталог_документа
текущего сервера
.
В разделе
, которые должны быть защищены в режиме обслуживания, добавьте перед любыми правилами обычного режима :
if (-f "$ isDevHack / home / site-home / maintenance") {
возврат 503;
}
Если текущий пользователь является разработчиком, к проверенному имени файла будет добавлен префикс / non-existed-location
и , если
никогда не будет введен.
У меня есть довольно простая настройка сервера, для которой конфигурация в конце ответ будет следующим:
Если файл с именем MAINTENANCE
существует на один уровень выше корневого, то сервер будет в режиме обслуживания. (Это тест -f
.)
За исключением того, что существует файл 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
настроен так, чтобы я по ошибке не забыл, что сайт находится в режиме обслуживания.