У меня есть виртуальный ящик (бродяга), внутри которого запущен nginx + php-fpm. У меня загружен модуль xdebug. Версии:
ОПЕРАЦИОННЫЕ СИСТЕМЫ:
uname -a
Linux vagrant-ubuntu-vivid-64 3.19.0-26-generic #28-Ubuntu SMP Tue Aug 11 14:16:32 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
php5-fpm:
php5-fpm -v
PHP 5.6.4-4ubuntu6.2 (fpm-fcgi) (built: Jul 2 2015 15:59:03)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.2.6, Copyright (c) 2002-2014, by Derick Rethans
nginx:
nginx -V
nginx version: nginx/1.6.2 (Ubuntu)
TLS SNI support enabled
По неизвестной причине получаю:
upstream timed out (110: Connection timed out) while
reading response header from upstream
Я попробовал настроить обе сокеты unix для настройки php5-fpm и TCP - оба не прошли с той же ошибкой.
С настройкой розеток, Я попытался изменить разрешения на прослушивание на чтение-запись и даже на 777
- нет разницы. На всякий случай образец конфига (www.conf
) для розеток:
listen.owner = www-data
listen.group = www-data
listen.mode = 0666
И пользователь существует:
id www-data
uid=33(www-data) gid=33(www-data) groups=33(www-data)
С настройкой TCPОднако у меня есть:
$ telnet 127.0.0.1 9000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Это означает, что он действительно прослушивает этот порт. Также еще одна проверка:
netstat -tulpn | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 4396/php-fpm.conf)
Я также попытался отключить xdebug - просто чтобы убедиться, что это не проблема с подключением к нему (но, на самом деле, это бессмысленно, поскольку моя IDE запускается на хост-машине, и поэтому его порт не имеет ничего общего с портом внутри виртуальной машины) .
Я пытался установить fastcgi_read_timeout
вместе с max_execution_time
до действительно высоких значений (тысячи секунд), и это тоже не помогает.
Итак, что могло вызвать такое поведение и как решить эту проблему? Или, по крайней мере, что я могу сделать для отладки дела?
Обновить:
Когда я устанавливаю очень большой тайм-аут, сервер отвечает. Но дело в том, что я вижу, что это не проблема приложения, поскольку:
С вещами выше я совсем потерялся: nginx сообщает, что шлюз время ожидания. Это должно означать: запрос пришел к nginx, а затем был истекло время ожидания между nginx и его серверной частью (в данном случае php5-fpm). Если запрос "зависает" еще до появления в логах nginx - как приходит бэкэнд? Я имею в виду, почему у nginx есть «таймаут восходящего потока»?
Поэтому возникнет вопрос - что может вызвать такие задержки?
Если потребуется дополнительная информация - предоставлю.
Я также пробовал аналогичные вопросы по SO / SF, и это не помогло делу
Проблема решена. Проблема заключается в настройке бродяг:
# Shared folder
config.vm.synced_folder "./../", "/vagrant/",
:nfs => true
И поскольку приложение пыталось записать журнал в общую папку, оно зависало, потому что реализация регистратора пыталась применить блокировку к файлу через flock()
что просто некорректно работает в случае NFS.
Итак, решение: