Страница 1 из 1

Настройка кэширования php - APC opcode cache

Добавлено: 2013-06-26 15:52:09
Strycker
Добрый день!

Требуется помощь вселенского разума - бьюсь второй день никак не могу осознать до конца работу отдельных компонентов, чтоб заставить их вместе работать.

И так, исходные данные задачи:
- FreeBSD 8.2
- Apache 2.2 MPM prefork
- php 5.3.26
- apc 3.1.9
- nginx 1.0.4

Построена следующая конфигурация: nginx - раздаёт статику, apache - динамику. В apache добавлен модуль fastcgi. Теперь появилась необходимость запустить APC кэширование. Включил в php.ini в соответсвующей секции настройку. Увидел что кэш работает, но через 3-5 минут перезагружается. Погуглил и понял, что для каждого php-процесса APC создаёт свой отдельный кэш. Использовал параметр в php.ini - apc.mmap_file_mask для того php работал с одним файлом кэша (может не правильно понял назначение параметра). Всё равно перегружается, но на этот раз работает дольше (1-2 часа) и жрёт память.

Вычитал, что нужен менеджер php-процессов - php-fpm. Стал настраивать - не работает. Сокет открывается, но данные не идут. Позже, обнаружил, что сам mod_fastcgi может управлять процессами. На этом этапе окончательно запутался - каша в голове.

Помогите осознать схему работы этих компонентов и выбрать правильное решение.

Re: Настройка кэширования php - APC opcode cache

Добавлено: 2013-06-27 11:53:04
vadim64
оцените, что хотите получить на выходе
нарисуйте на бумаге или в гимпе
снесите всё
на чистой системе реализуйте нарисованную схему

всё будет ок, против лома нет приёма

Re: Настройка кэширования php - APC opcode cache

Добавлено: 2013-06-27 16:04:27
Strycker
vadim64 писал(а):оцените, что хотите получить на выходе
нарисуйте на бумаге или в гимпе
Спасибо за совет, но проблема в том, что у меня нет точного понимания структуры решения. Своё представление я постарался изобразить в схеме:
Изображение
Основная проблема для меня здесь - это "вклинить" php-fpm в цепочку.

Если не сложно, посмотрите пожалуйста конфиг? Привожу рабочий вариант конфига Апача. Так у меня настроен модуль fastcgi
"httpd.conf"

Код: Выделить всё

<IfModule mod_fastcgi.c>
    FastCgiConfig	-singleThreshold 30 -minProcesses 2 -restart    \
			-idle-timeout 400 -killInterval 200 -autoUpdate \
			-pass-header HTTP_AUTHORIZATION
    FastCgiIpcDir /var/run/fastcgi
    FastCgiWrapper /usr/local/sbin/suexec
    Action application/x-httpd-fastphp /php-fcgi/php.sh
    Action application/x-httpd-php /php-fcgi/php.sh
    AddType application/x-httpd-fastphp .php
    <Location /php-fcgi/>
	Options ExecCGI FollowSymLinks
	SetHandler fastcgi-script
    </Location>
</IfModule>

<VirtualHost *:8888>
    DocumentRoot	"/usr/local/www/test/"
    ServerAdmin	webmaster@test.ru
    ServerName		www.test.ru
    ServerAlias		test.ru
    Alias /php-fcgi/ "/usr/local/www/cgi-bin/"

    ErrorLog "/var/log/sites/test.er-httpd.log"
    CustomLog "/var/log/sites/test.ac-httpd.log" combined
	<Directory "/usr/local/www/test/">
	    Options None
	    AllowOverride All
	    Order Allow,Deny
	    Allow from All
	</Directory>
</VirtualHost>
Внутри файлика php.sh

Код: Выделить всё

#!/bin/sh

PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
#PHP_FCGI_MAX_REQUESTS=5000
#export PHP_FCGI_MAX_REQUESTS

exec /usr/local/bin/php-cgi
Теперь пытаюсь встроить php-fpm в эту конструкцию.Добавляю в php-fpm.conf одну строчку:

Код: Выделить всё

listen = /tmp/php-fpm.sock
В конфиг апача добавляю строки, в раздел модуля fastcgi:

Код: Выделить всё

FastCGIExternalServer /usr/local/www/test/cgi-bin/php5.fcgi -socket /tmp/php-fpm.sock
Не работает, чего-то явно не хватает.

Re: Настройка кэширования php - APC opcode cache

Добавлено: 2013-06-27 22:18:15
Strycker
Разобрался. В файле httpd.conf

Код: Выделить всё

<IfModule mod_fastcgi.c>
    FastCgiExternalServer /usr/local/www/cgi-bin/php5-fcgi -socket /tmp/php-fpm.sock -pass-header Authorization
</IfModule>
в каждом виртуал хосте

Код: Выделить всё

    AddHandler php5fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/local/www/cgi-bin/php5-fcgi
И всё заработало.