[Sysadmins] php-5.3.3 + fpm + nginx

ddv на bgc.perm.ru ddv на bgc.perm.ru
Пн Сен 20 17:53:13 UTC 2010


Вечер добрый!

Моя попытка заюзать php-5.3.3... На примере одно джумла сайта..

давно хотел перейти на сабж, но всё ждал php-5.3.3.. код на сайтах всех
переписал... все сайты работают, но на apache2 + mod_php

А вот сабж почти не работает.

вот такое в лог nginx падает:
2010/09/20 23:25:21 [error] 19630#0: *341 FastCGI sent in stderr: "PHP
Notice:  Trying to get property of non-object in
/var/www/mydomain.ru/plugins/system/xajax.php on line 57" while reading
response header from upstream, client: 94.50.5.244, server: mydomain.ru,
request: "GET /administrator/ HTTP/1.1", upstream:
"fastcgi://127.0.0.1:9000", host: "mydomain.ru"

Конфиг nginx:
server {
        listen      80;
        server_name mydomain.ru www.mydomain.ru;

        access_log  /var/log/nginx/mydomain.ru-access.log;
        error_log   /var/log/nginx/mydomain.ru-error.log;

        large_client_header_buffers 4 8k;

        root        /var/www/mydomain.ru;
        index       index.php;

        gzip on;
        
        gzip_types text/plain text/css application/x-javascript text/xml
application/xml application/rss+xml text/javascript image/x-icon;
        gzip_min_length 1000;
        gzip_comp_level 9;
        gzip_http_version 1.0;
        gzip_vary on;
        gzip_proxied expired no-cache no-store private auth;
        gzip_disable msie6;

        location / {
                rewrite "^/administrator"
https://mydomain.ru/administrator last;
                expires 30d;
                error_page 404 = @joomla; 
                log_not_found off;
        }

        location @joomla { 
                rewrite ^(.*)$ /index.php?q=$1 last;
        }
 
        location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                include /etc/nginx/fastcgi_params;
                fastcgi_param  SCRIPT_FILENAME 
$document_root$fastcgi_script_name;
        }

        location ~* \.(css|js) {
                gzip_static on;

                gzip_disable Firefox/([0-2]\.|3\.0);
                gzip_disable Chrome/2;
                gzip_disable Safari;
                gzip_disable Konqueror;
        }
}

server {
        listen               443;
        server_name mydomain.ru www.mydomain.ru;
        keepalive_timeout    70;

        access_log  /var/log/nginx/mydomain.ru-access.log;
        error_log   /var/log/nginx/mydomain.ru-error.log;

        large_client_header_buffers 4 8k;

        root        /var/www/mydomain.ru;
        index       index.php;

        gzip on;
        gzip_types text/plain text/css application/x-javascript text/xml
application/xml application/rss+xml text/javascript image/x-icon;
        gzip_min_length 1000;
        gzip_comp_level 9;
        gzip_http_version 1.0;
        gzip_vary on;
        gzip_proxied expired no-cache no-store private auth;
        gzip_disable msie6;

        location / {
                expires 30d;
                error_page 404 = @joomla; 
                log_not_found off;
        }

        location @joomla { 
                rewrite ^(.*)$ /index.php?q=$1 last;
        }
 
        location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                include /etc/nginx/fastcgi_params;
                fastcgi_param  SCRIPT_FILENAME 
$document_root$fastcgi_script_name;
        }

        location ~* \.(css|js) {
                # разрешаем отдавать вместо несжатого файла,
предварительно # сжатый с постфиксом «.gz», если такой есть
                gzip_static on;
                # запрещаем сжатие файлов CSS и JS для проблемных
браузеров
                gzip_disable Firefox/([0-2]\.|3\.0);
                gzip_disable Chrome/2;
                gzip_disable Safari;
                gzip_disable Konqueror;
        }

        ssl                  on;
        ssl_protocols        SSLv3 TLSv1;
        ssl_ciphers         
AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_certificate      /etc/httpd2/conf/ssl/keys/mydomain.ru.crt;
        ssl_certificate_key  /etc/httpd2/conf/ssl/keys/mydomain.ru.key;
        ssl_session_cache    shared:SSL:10m;
        ssl_session_timeout  10m;
}

Конфиг fpm:
cat /etc/fpm/fpm.d/joomla.conf
[joomla]
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
user = apache2
group = apache2

pm = dynamic
pm.max_children = 15
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 15

slowlog = /var/log/php5-fpm/joomla.slow.log
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/joomla.err.log
php_admin_flag[log_errors] = on
php_admin_value[upload_max_filesize] = 100M

Страница открывается долго, 20 секунд, висит 5 процессов php5-fpm и грузят
проц под 100%. Когда тоже самое на apache2 + mod_php 1,5 сек и нагрузка на
проц 3%.

Ещё такой момент непонятен с nginx.
В Firefox смотрю http заголовки и вижу в обоих случаях(apache2 и nginx)
gzip контент. В Google Chromium можно увидеть сколько скачано и реальный
размер. Для apache2 показывает, что скачано скажем 30kb и реальный размер
70kb, для nginx просто как не сжатое 70kb. Жмёт ли, непонятно.

Если включить apc, то в логах php5-fpm наблюдаю:
Sep 20 21:28:55.550360 [WARNING] [pool joomla] child 11619 said into
stderr: "[Mon Sep 20 21:28:55 2010] [apc-warning] "
Sep 20 21:28:55.550445 [WARNING] [pool joomla] child 11619 said into
stderr: "Potential cache slam averted for key
'cache_mod_mainmenu-b0047de1b6557e1cbc01b3fe0b7aece3_expire'"
Sep 20 21:28:55.550513 [WARNING] [pool joomla] child 11619 said into
stderr: " in /var/www/mydomain.ru/libraries/joomla/cache/storage/apc.php on
line 71."
Sep 20 21:28:55.550562 [WARNING] [pool joomla] child 11619 said into
stderr: ""

ну и половину контента естественно не отдаёт при  включенном apc


Подробная информация о списке рассылки Sysadmins