Текущее время: 27 сен 2020, 07:23

Русская поддержка форума phpBB

Это сайт русской поддержки phpBB

Страница ошибок в nginx

Аватара пользователя
Сообщения: 358
Стаж: 8 лет 6 месяцев
Карма: 30
Россия

Сообщение » 07 май 2013, 11:56

Редко но бывает, что вместо страницы сайта пользователь видит страницу ошибки. Случай со страницей ошибки 404 я уже рассматривал, теперь пришло взяться за другие ошибки.

Стандартно на странице ошибки показывается код ошибки и краткое описание. Иногда предложение обратится к администратору, но я видел мало случаев, когда пользователи писали, обычно страница просто закрывается.

Для администратора же важно узнать о наличии проблемы и разобраться в ней.

Ошибки 50x

Для примера я взял ошибки 50х, появление которых свидетельствует о проблемах на сервере.

500 Internal Server Error (Внутренняя ошибка сервера).
501 Not Implemented (Не реализовано).
502 Bad Gateway (Плохой шлюз).
503 Service Unavailable (Сервис недоступен).
504 Gateway Timeout (Шлюз не отвечает).

Одной из причин появления таких ошибок может быть падение php под нагрузкой. К счастью у меня после настройки nginx + WP Super Cache такое бывает очень редко.

Настройка nginx

Для начала нужно заставить nginx выдавать нашу страницу ошибки, вместо стандартной.
Код: Выделить всё
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /путь/к/файлу;
}
Желательно /путь/к/файлу прописывать отличающийся от пути к сайту, чтобы он был доступен только при наличии ошибки.

В этом примере все ошибки сведены к одному общему файлу. Главное установить факт появления ошибки, а детали потом смотреть в логе сервера.

Файл ошибки

Создаем файл 50x.html и добавляем туда код<html>
Код: Выделить всё
<head>
<title>TIgor's BloG : Error 50x page</title>
</head>
<body>
This is an error 50x.
<script type="text/javascript">var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-*********']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();</script>
<script>setTimeout('_gaq.push([\'_trackEvent\', \'Error 50x\', \'Das Error\'])',1000);</script>
</body>
</html>
Самой главной частью страницы является код Google Analytics. Через секунде после открытия страницы будет отправлено событие с сообщением об ошибке.
И вот так оно отображается в панеле:
#622

Недостатки

Во первых я не нашел в Google Analytics моментальных уведомлений о событиях. Если сайт упадет, то мгновенно об этом узнать не выйдет.

Во вторых наличие ошибок 50х предполагает, что сервер работает неправильно и использовать для уведомления php будет невозможно.

В третьих выскакивающие окошки с просьбой отправить письмо, уведомление в социальную сеть или другое подобное действие вызовет скорее раздражение у пользователя, чем желание помочь.
p.s Проверял, работает.
Если нужен стиль для сайта, стучите: ICQ 560107181

Вернуться в Примеры решений по Linux



Кто сейчас на конференции

Сейчас этот форум просматривают: нет пользователей онлайн и гости: 1