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

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 вообще нет никаких свидетельств об этом инциденте.

Что я делаю не так?
  • Вопрос задан
  • 10871 просмотр
Подписаться 9 Оценить Комментировать
Решения вопроса 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.
Т.е. вообще ничего не выводится при ошибке. Белый экран смерти, блин)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы