Декабрь
5
2011

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

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

Редко но бывает, что вместо страницы сайта пользователь видит страницу ошибки. Случай со страницей ошибки 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. Через секунде после открытия страницы будет отправлено событие с сообщением об ошибке.

Я тут потестировал немного, и вот так оно отображается в панеле

Недостатки

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

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

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

Неправильная раскладка: cnhfybwf jib,jr d тпштч

Понравилась статья? Посоветуйте друзьям!

Analytics Google HTML JavaScript nginx


Понравилась статья? Подпишись на рассылку по E-Mail или в RSS.
  • Наконец-то узнал, что конкретно обозначают эти ошибки и как их исправить.
  • Хорошо, что Вы написали об этом статью, а то действительно очень часто попадаешь на такие ошибки и не знаешь, что они означают!=)
  • На днях намучился с 503 ошибкой... В следующий раз хоть знать буду что делать.
  • Спасибо за информацию, буду знать что делать))
  • При ошибке сервера как правило ваша страница не выводится, а сервер выбросит свою страницу. Вообщем может и не сработать свой файл...
  • Если nginx работает на сервере, то будет выведена та страница, которую я указал. Если nginx перестанет работать, то сервер не будет откликаться. Для слежения за такими событиями есть другие способы.
  • А посмотреть никак нельзя как этот файл работает?
  • Он никак не работает. В случае ошибки этот файл выдается пользователю вместо стандартного сообщения. А уже у пользователя в браузере выполняется java-script и отсылает в Google Analytics сообщение о событии.
  • Добрый день А создавать в аккаунте Аналитикса goal - Error 50x нужно? Может с яндекс метрикой или с другим своим сайтом (на другом сервере) javascript код как-то можно интегрировать чтобы получать точные моментальные уведомления? Перезапускать nginx тоже нужно?
  • Я пытался найти способ отправлять сообщения по Javascript, но рабочего варианта так и не нашел. У метрики вроде аналогов ивента нет. Есть идея найти сервис, который отсылает уведомление о просмотре изображения и вставить его в на страницу ошибки.
  • А можно просто вставить фрейм в котором будет подгружать php страница с другого сервера и уже на другом php сервере код будет отправлять уведомление. Разве это такая уж проблема? Все таки я не понял насчет \"цели\" - нужно ли создавать цель в аналитиксе или там как-то автоматически она из кода определится?? UA-**** - своего сайта в код я подставил... 
  • Проблема иметь еще один сервер. Если он есть, то можно и без фрайма обойтись. Насчет \"цели\" этот кусок setTimeout(\'_gaq.push([\'_trackEvent\', \'Error 50x\', \'Das Error\'])\',1000);создает событие через 1 секунду (1000 милесекунд). Гугл там разберется.
  • Спасибо. Ну все равно хоть какой-то VPS или хостинг простенький в дополнительно к основному думаю есть у всех почти. 
  • А в чем прикол (при перезагрузке с конфигом выше) # /etc/init.d/nginx restart Restarting nginx: [emerg]: unknown directive \"error_page\" in /etc/nginx/nginx.conf:12 configuration file /etc/nginx/nginx.conf test failed его куда-то в специальное место нужно вписывать? К сожалению инструкция довольно не полная, сложно понять... 
  • У меня она прописана в части server, хотя судя по документации его можно вставлять и в http, и в location, и внутри условий (if).