Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
хочу в админке сделать кнопку, которая переведет сайт в режим обслуживания, и на всех страницах будет выводиться надпись сайт обновляется
как реализовать перехват всех запросов и перенаправить на страницу с текстом?
плюс надо фильтровать запросы на админку, чтобы можно было потом выключить этот режим
Не в сети
Про maintenance mode ты знаешь?
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
этим будет пользоваться человек далекий от консоли
нужно решение через веб
Не в сети
Велосипедить плохо.
Ходить по сайту во время обслуживания плохо. Неважно по админке или где ещё.
Я вижу два неплохих варианта, оба таки будут использовать команды up/down.
1. Вызывать их извне, из веб-скрипта, который гнездится в отдельном виртуальном хосте на том же сервере.
2. Прописать нужные IP адреса как исключения для режима обслуживания и строго предупредить "того человека", что сайт трогать во время обслуживания очень нежелательно.
IP для исключения можно взять прямо тот, которым админ пользуется в момент нажатия на красную кнопку.
Вызвать консольную команду из веб-скрипта несложно.
https://www.php.net/manual/en/function.shell-exec.php
или
https://webdevetc.com/programming-trick … controller
Изменено artoodetoo (13.02.2020 16:35:27)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
как вариант это использовать команду
php artisan down --allow=127.0.0.1 --allow=192.168.0.0/16
и указать ип вызывающего
а можно определить в каком состоянии находится сайт ? это где то сохраняется в параметрах сайта?
Не в сети
обнаружил неприятный момент
php artisan --version
Laravel Framework version 5.3.31
в композере "laravel/framework": "5.3.*"
а в доке параметр allow ip под версию 6
получается надо обновляться? ничего не сломается?
или как тогда быть?
Изменено ru (13.02.2020 22:21:21)
Не в сети
Ради одного этого, ИМХО, не стоит. Но 5.3 это очень старая версия, думаю пора
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
там наверно все сломается
я тут тестовый проект обновил 5.2 на 5.8 и то перестал запускаться
Не в сети
Вообще, желательно, чтобы веб-сервер выдавал плашку "обслуживание", а не само приложение. С сервером нет шансов, что какие-то запросы "протекут" (потому что для них middleware не работает или еще что-нибудь подобное). В случае с nginx это делается добавлением набора allow/deny в блок server или location:
allow 1.2.3.4;
allow 5.6.7.8;
deny all;
Но есть и более интересный способ, про который мало знают. В nginx есть опция auth_request - с ней вопрос об аутентификации можно решать в контексте приложения! Когда приходит внешний запрос, nginx опрашивает этот URL и если в ответе код 401 или 403 - пользователю дается "отлуп" (который можно показать в виде красивой кастомной страницы об ошибке путем error_page). В отличии от ручного прописывания allow/deny, здесь не нужно править конфиг сервера, перезапускать его, вообще лезть в консоль, да и гибкость куда большая.
Выглядит это примерно так (подробности в документации):
server {
...
error_page 403 /403.html;
location / {
auth_request /auth.php;
include fastcgi.conf;
}
location = /auth.php {
include fastcgi.conf;
}
}
Не в сети
этим будет пользоваться обычный юзер а не сисадмин
я решил проблему так- создал обычную пхп страницу которая умеет выполнять команду php artisan down\up
даже при "выключенном режиме" эта пхп страница будет открываться и можно будет включить основной сайт
Не в сети
этим будет пользоваться обычный юзер а не сисадмин
Я поэтому про allow_request и написал. auth.php может проверять файл на наличие, какую-то строку в БД и пр.
я решил проблему так- создал обычную пхп страницу которая умеет выполнять команду php artisan down\up
Позволять выполнять shell-команды из PHP - плохая идея с точки зрения безопасности.
Не в сети
Страницы 1