Задать вопрос

Nginx+php-fpm+freebsd логи?

Всем привет.

После недели мучений я сдаюсь. :)

Мне нужна помощь в настройке связки nginx+php-fpm+freebsd

Конкретнее, у меня проблема с логами ошибок. Они, тупо, не пишутся.

вводные данные таковы.

freebsd 8.3-RELEASE

PHP 5.4.7 (fpm-fcgi)

nginx version: nginx/1.2.4



конфиг FPM

[global]<br>
pid = run/php-fpm.pid<br>
error_log = log/php-fpm.log<br>
log_level = notice<br>
emergency_restart_threshold = 5<br>
emergency_restart_interval = 2<br>
process_control_timeout = 2<br>
daemonize = yes<br>
events.mechanism = kqueue<br><br>
[puser]<br>
listen = /usr/local/www/host/tmp/php-fpm.sock;<br>
listen.backlog = -1<br>
listen.allowed_clients = 127.0.0.1<br>
listen.owner = puser<br>
listen.group = puser<br>
listen.mode = 0666<br>
user = puser<br>
group = puser<br>
pm = dynamic<br>
pm.max_children = 30<br>
pm.start_servers = 2<br>
pm.min_spare_servers = 2<br>
pm.max_spare_servers = 5<br>
pm.max_requests = 50<br>
slowlog = /usr/local/www/host/logs/fpm.log.slow<br>
request_slowlog_timeout = 1s<br>
rlimit_files = 1024<br>
rlimit_core = 0<br>
chroot = /usr/local/www/host/<br>
catch_workers_output = yes<br>
env[HOSTNAME] = $HOSTNAME<br>
env[TMP] =    /tmp<br>
env[TMPDIR] = /tmp<br>
env[TEMP] =   /tmp<br>
php_admin_value[upload_tmp_dir] = /tmp<br>
php_admin_value[cgi.fix_pathinfo] = 0<br>
php_admin_value[date.timezone]= 'Europe/Moscow'<br>
php_admin_value[memory_limit] = 320m<br>
php_admin_value[max_execution_time] = 180<br>
php_admin_flag[log_errors] = on<br>
php_admin_value[error_log]  = /usr/local/www/host/logs/fpm-err.log (пробовал и по chroot ставить, и просто файл указывал. никаких признаков жизни)<br>
php_admin_value[error_reporting] = 'E_ALL & ~E_NOTICE'<br>
php_admin_value[display_errors] = off<br>
php_admin_flag[display_startup_errors] = off<br>




конфиг nginx

user  www;<br>
worker_processes  2;<br>
worker_rlimit_nofile 80000;<br><br>
error_log  /var/log/nginx_error.log  notice;<br><br>
#pid        logs/nginx.pid;<br><br>
events {<br>
    worker_connections  2048;<br>
    use kqueue;<br>
}<br><br>
http {<br>
    server_tokens off;<br>
    client_max_body_size 4m;<br>
    include       mime.types;<br>
    default_type  application/octet-stream;<br>
    charset utf-8;<br>
    sendfile        on;<br>
    keepalive_timeout  65;<br>
    tcp_nopush          on;<br>
    tcp_nodelay         on;<br>
    log_format IP .$remote_addr.;<br>
    log_format main '$remote_addr - $remote_user [$time_local] $request $request_body '<br>
'"$status" $body_bytes_sent "$http_referer" '<br>
'"$http_user_agent" "$http_x_forwarded_for"';<br>
    reset_timedout_connection on;<br>
    server {<br>
  listen 80;<br>
  server_name www.example.com;<br><br>
  access_log /usr/local/www/host/logs/access.log main;<br>
  error_log  /usr/local/www/host/logs/error.log error;<br>
  error_page 500 502 503 504 /errors/50x.html;<br>
  error_page 404  /errors/404.html;<br>
  root /usr/local/www/host/htdocs;<br>
  index index.php index.html index.htm;<br><br>
  location / {<br>
        index  index.html index.php;<br>
        try_files $uri /index.php?$args;<br>
    }<br><br>
   location ~ \.php$ {<br>
    fastcgi_split_path_info  ^(.+\.php)(.*)$;<br>
    fastcgi_intercept_errors on;<br>
    fastcgi_pass unix:/usr/local/www/host/tmp/php-fpm.sock;<br>
    fastcgi_index index.php;<br>
    fastcgi_param SCRIPT_FILENAME   /htdocs$fastcgi_script_name;<br>
    fastcgi_param  PATH_INFO        $fastcgi_path_info;<br>
    fastcgi_param  PATH_TRANSLATED  /htdocs$fastcgi_script_name;<br>
    include /usr/local/etc/nginx/fastcgi_params;<br>
    }<br>
}<br><br>
}<br><br>




в файле index.php, намеренно допускаю ошибку, например ставлю ' (кавычку) и…

никакой реакции со стороны сервера. Он, конечно, вываливает 500 стандартную ошибку, но во всех логах, кроме access.log вообще нет никаких свидетельств об этом инциденте.

Что я делаю не так?
  • Вопрос задан
  • 10896 просмотров
Подписаться 9 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@baalmor Автор вопроса
Короче, решение оказалось до слез простым.
php_admin_value[error_reporting] = 'E_ALL & ~E_NOTICE' содержит кавычки, но в документации было замечание, что правильно указывать этот параметр без кавычек.
Соответсвенно меняем на
php_admin_value[error_reporting] = E_ALL & ~E_NOTICE

и получаем долгожданный лог.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
kerberos
@kerberos
Рекомендую посмотреть какой используется в данный момент php.ini файл с помощью

<?php phpinfo();

Затем, в данном php.ini файле проставить нужное значение в параметр error_log
Ответ написан
Комментировать
@baalmor Автор вопроса
Попробовал, вообще никаких изменений.
Ответ написан
Комментировать
Diam0n
@Diam0n
какие права установлены на папку /usr/local/www/host/logs/?
Нужно чтобы туду мог пиcать nginx
ну и конечно создать и установить права на запись в файлы access.log и error.log на запись для пользователя www
Ответ написан
AGvin
@AGvin
Посмотрите в php.ini, по крайней мере на директивы error_reporting и
log_errors
Если Вы хотите вывести ошибки в браузере, используйте display_errors
Ответ написан
@baalmor Автор вопроса
Я обнаружил удивительную вещь. У меня не получается даже вывести ошибку включая параметр display_error
и выключая fastcgi_intercept_errors.
Т.е. вообще ничего не выводится при ошибке. Белый экран смерти, блин)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽