Ошибка 503 при включении режима техобслуживания - в чём дело?

Автор Sferg, 09 сентября 2014, 16:49:25

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Sferg

Здравствуйте, господа.

Имеется домашний веб-серверок с Debian на борту. Установлено следующее веб-серверное ПО:

  • Nginx v1.6.0
  • PHP-FPM v5.4.4-14+deb7u14
  • MySQL v5.5.39-MariaDB

Решил вот поставить себе SMF v2.0.8 - посмотреть воочию, пощупать так сказать. Всё понравилось, всё хорошо (даже таблицы из MyISAM в InnoDB перевёл). Омрачило мою радость лишь такое обстоятельство: стоит в админке включить режим техобслуживания и всем пользователям кроме меня (Администратора), выводится ошибка 503. Если я сделаю Log Out, то и мне выдастся 503-я ошибка без возможности (кроме плясок с бубном) авторизоваться на форуме снова. Если техобслуживание отключить, то всё работает нормально. В чём может быть проблема? Очень сомневаюсь, что это так задумано.

P.S. В error.log ошибок никаких нет, в access.log только фиксируется 503-я ошибка (касается как логов Nginx, так и логов PHP-FPM).

Yworld_garry

Я с таким не сталкивался, да и не специалист в этом. Но масса же утилит и тд чем можно посмотреть, что грузит сервак при этой настройки форума.
Но это что то локальное.


Sferg

#3
Цитата: digger® от 09 сентября 2014, 17:25:23php-fpm смотрите, наверняка там fatal error какая-то возникает, отсюда и 503 ошибка в nginx.

Написал же:

ЦитироватьВ error.log ошибок никаких нет

access.log от Nginx:

[09/Sep/2014:17:32:39 +0400] 192.168.0.46 -
"HTTP/1.1" "GET" "http" "/forum/"
503 453 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Safari/537.36 OPR/22.0.1485.81203" "-" "-"


access.log от PHP-FPM:

- -  09/Сен/2014:17:32:39 +0400 "GET /forum/index.php" 503 /forum/index.php 45.103 2304 66.51%

digger®

ЦитироватьВ error.log ошибок никаких нет
Эта фраза без контекста мне напомнила про unzip.zip :) Видимо, речь про error.log виртуального хоста.

В случае с fpm есть два лога - это php-fpm.log, в котором можно увидеть только падения самого менеджера или проблемы с пулами и лог пула который обслуживает конкретный сайт, он то и представляет интерес.

Sferg

Цитата: digger® от 09 сентября 2014, 17:41:17php-fpm.log, в котором можно увидеть только падения самого менеджера или проблемы с пулами и лог пула

У меня кастомные конфиги. Три типа логов: $pool.access.log, error.log и $pool.slow.log

Все ошибки у меня пишутся в error.log (и общие, и пула). Но, как я уже сообщил, 503-я ошибка есть только в $pool.access.log.

digger®

Цитата: Sferg от 09 сентября 2014, 17:53:02
У меня кастомные конфиги. Три типа логов: $pool.access.log, error.log и $pool.slow.log

Все ошибки у меня пишутся в error.log (и общие, и пула). Но, как я уже сообщил, 503-я ошибка есть только в $pool.access.log.
В логе php не может быть get запросов и ошибок 503 - это относится только к веб-серверу. И, вряд ли, есть возможность реализовать запись в один физический лог и для web-сервера и для fpm-пула.
Не те логи вы анализируете.

Sferg

Цитата: digger® от 09 сентября 2014, 18:07:29В логе php не может быть get запросов и ошибок 503 - это относится только к веб-серверу.

Выше я привёл содержимое access.log от Nginx и от PHP-FPM. Как видите, 503 есть и там, и там.

Цитата: digger® от 09 сентября 2014, 18:07:29И, вряд ли, есть возможность реализовать запись в один физический лог и для web-сервера и для fpm-пула.

Кто Вам сказал про объединение логов php-пула с логами веб-сервера? Вы о чём? Я писал про объединение общих ошибок php и ошибок php-пула в один error.log, а не про объединение логов веб-сервера с логами php-пула. ;D

Цитата: digger® от 09 сентября 2014, 18:07:29Не те логи вы анализируете.

Согласен.

digger®

Вы смотрите только логи веб-сервера, видите в них некритические ошибки php и считаете, что у вас ошибки пишутся в одном общем месте. А на самом деле, это не ошибки php, а ответы php-бэкэнда записанные в лог веб-сервера.
Логом пула вы называете лог сайт.error.php, как я понимаю, и это тоже неверно.
Да, можно увидеть ошибки php в логе веб-сервера, но если php-бэкэнд умер из-за критической ошибки, то он ничего веб-серверу не ответит, соответственно в логе веб-сервера кроме 5xx ничего интересного не запишется.

В /etc/php5/fpm/pool.d у вас есть файл типа www.conf, содержащий конфиг fpm пула. Впишите в него
php_admin_flag[log_errors] = on
php_admin_value[error_log] = /var/log/php5-fpm.www.log

перезапустите php-fpm и получите лог своего fpm пула, в котором наверняка найдете причину своей проблемы.


Sferg

#9
digger®, у меня так настроено:

php_admin_flag[log_errors] = On
php_admin_value[error_log] = /var/log/php5-fpm/error.log


Повторюсь в 4-й раз: в

/var/log/php5-fpm/error.log
/var/log/nginx/error.log

Ошибок НЕТ.

P.S. Разобрался. Проблема была в конфиге Nginx'a:

fastcgi_intercept_errors  on;
error_page                404 /errors/404.html;
error_page                500 501 502 503 504 /errors/50x.html;


Если убрать 503 или поставить fastcgi_intercept_errors  off, то ошибка исчезает.

Ещё точнее, проблема была в ../Sources/Subs-Auth.php, строка 250-251:

// Send a 503 header, so search engines don't bother indexing while we're in maintenance mode.
header('HTTP/1.1 503 Service Temporarily Unavailable');


Только непонятно, для чего. Хотели не пустить поисковиков во время техобслуживания, а в итоге не может зайти вообще никто... :facepalm:

Всем спасибо за помощь!