It seems there is no way to get informed about the access log format codes that are used or can be used. All I found is the source code.
It would really help, not to have open questions when deploying php-fpm. I constantly struggle with file paths for example, but that is another topic.
case '%': /* '%' */
case 'C': /* %CPU */
case 'd': /* duration µs */
case 'e': /* fastcgi env */
case 'f': /* script */
case 'l': /* content length */
case 'm': /* method */
case 'M': /* memory */
case 'n': /* pool name */
case 'o': /* header output */
case 'p': /* PID */
case 'P': /* PID */
case 'q': /* query_string */
case 'Q': /* '?' */
case 'r': /* request URI */
case 'R': /* remote IP address */
case 's': /* status */
case 'T':
case 't': /* time */
case 'u': /* remote user */Конфигурација
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Конфигурација
Референца за `install.fpm.configuration.php` со подобрена типографија и навигација.
Конфигурација
FPM користи php.ini синтаксија за својата конфигурациска датотека - php-fpm.conf, и конфигурациски датотеки на базенот.
Список на глобални php-fpm.conf directives
-
pidstring -
Патека до PID датотеката. Стандардна вредност: нема.
-
error_logstring -
Патека до датотеката со лого за грешки. Стандардна вредност:
#INSTALL_PREFIX#/log/php-fpm.log. Ако е поставено на "syslog", логот се испраќа до syslogd наместо да се запишува во локална датотека. -
log_levelstring -
Ниво на лого за грешки. Можни вредности: alert, error, warning, notice, debug. Стандардна вредност: notice.
-
log_limitint -
Ограничување на лого за запишаните редови што овозможува запишување пораки подолги од 1024 знаци без превиткување. Стандардна вредност: 1024. Достапно од PHP 7.3.0.
-
log_bufferingbool -
Експериментално запишување без дополнително баферирање. Стандардна вредност: yes. Достапно од PHP 7.3.0.
-
syslog.facilitystring -
се користи за специфицирање каков тип на програма го запишува пораката. Стандардна вредност: daemon.
-
syslog.identstring -
Додадено пред секоја порака. Ако имате повеќе FPM инстанци што работат на ист сервер, можете да ја промените стандардната вредност што мора да одговара на општите потреби. Стандардна вредност: php-fpm.
-
emergency_restart_thresholdint -
Ако овој број на детски процеси заврши со SIGSEGV или SIGBUS во временскиот интервал поставен од
emergency_restart_interval, тогаш FPM ќе се рестартира. Вредност од 0 значи 'Исклучено'. Стандардна вредност: 0 (Исклучено). -
emergency_restart_intervalmixed -
Временски интервал што го користи
emergency_restart_intervalза да одреди кога ќе се иницира грациозно рестартирање. Ова може да биде корисно за да се заобиколат случајни оштетувања во меморијата што се споделува од акцелератор. Достапни единици: s(екунди), m(инути), h(ора), или d(енови). Стандардна единица: секунди. Стандардна вредност: 0 (Исклучено). -
process_control_timeoutmixed -
Временско ограничување за детските процеси да чекаат реакција на сигнали од главниот процес. Достапни единици: s(екунди), m(инути), h(ора), или d(енови) Стандардна единица: секунди. Стандардна вредност: 0.
-
process.maxint -
Максималниот број на процеси што FPM ќе ги форкира. Ова е дизајнирано за да се контролира глобалниот број на процеси кога се користи динамичен PM во многу бази. Користете го со претпазливост. Стандардна вредност: 0.
-
process.priorityint -
Специфицирајте ја приоритетната вредност nice(2) што треба да се примени на главниот процес (само ако е поставена). Вредноста може да варира од -19 (највисок приоритет) до 20 (најнизок приоритет). Стандардна вредност: не е поставено.
-
daemonizebool -
Испрати FPM во позадина. Постави на 'no' за да го задржите FPM во преден план за дебагирање. Стандардна вредност: yes.
-
rlimit_filesint -
Поставете rlimit на отворени дескриптори на датотеки за главниот процес. Стандардна вредност: системски дефинирана вредност.
-
rlimit_coreint -
Постави го rlimit описот за отворени фајл дескриптори за главниот процес. Стандардна вредност: системски дефинирана вредност.
-
events.mechanismstring -
Постави го rlimit описот за големината на core за главниот процес. Стандардна вредност: 0.
-
systemd_intervalint -
Наведи го механизмот за настани што ќе го користи FPM. Достапни се следниве: epoll, kqueue (*BSD), port (Solaris), poll, select. Стандардна вредност: не е поставено (автоматско откривање со преферирање на epoll и kqueue).
Кога FPM е изграден со интеграција на systemd, наведи го интервалот, во секунди, помеѓу известувањата за здравјето до systemd. Постави на 0 за да се оневозможи. Стандардна вредност: 10.
Список на директиви за pool.
-
listenstring -
Со FPM можете да управувате со неколку pool-ови на процеси со различни поставки. Ова се поставки што можат да се прилагодат по pool.
-
listen.backlogint -
Адресата на која ќе се прифаќаат FastCGI барањата. Валидни синтакса се: 'ip.add.re.ss:port', 'port', '/path/to/unix/socket'. Оваа опција е задолжителна за секој pool.
-1Постави го backlog-от на listen(2). Вредност од-1значи максимум на BSD системи. Стандардна вредност:511(FreeBSD или OpenBSD) или -
listen.allowed_clientsstring -
(Linux и други платформи).
-
listen.ownerstring -
Список на IPv4 или IPv6 адреси на FastCGI клиенти на кои им е дозволено да се поврзат. Еквивалентно на променливата на околината FCGI_WEB_SERVER_ADDRS во оригиналниот PHP FastCGI (5.2.2+). Има смисла само со tcp слушачки приклучок. Секоја адреса мора да биде одделена со запирка. Ако оваа вредност е оставена празна, врските ќе бидат прифатени од која било IP адреса. Стандардна вредност: не е поставено (прифатени се било кои IP адреси).
-
listen.groupstring -
Константи за известување за грешки
listen.owner. -
listen.modestring -
Константи за известување за грешки
listen.owner. -
listen.acl_usersstring -
Постави ги дозволите за unix сокет, ако се користи. Во Linux, дозволите за читање/запишување мора да бидат поставени за да се дозволат врски од веб-сервер. Многу системи базирани на BSD дозволуваат врски без оглед на дозволите. Стандардни вредности: корисникот и групата се поставени како корисникот што работи, режимот е поставен на 0660.
listen.ownerandlisten.groupКога се поддржани POSIX списоци за контрола на пристап, можете да ги поставите со оваа опција. Кога е поставено, -
listen.acl_groupsstring -
Константи за известување за грешки
listen.acl_usersсе игнорираат. Вредноста е список од имиња на корисници одделени со запирки. -
listen.setfibint -
. Вредноста е список од имиња на групи одделени со запирки.
-1Постави ја поврзаната табела за рутирање (FIB). Само FreeBSD. Стандардна вредност: -
userstring -
. Од PHP 8.2.0.
-
groupstring -
Unix корисник на FPM процесите. Оваа опција е задолжителна.
-
pmstring -
Изберете како менаџерот на процеси ќе го контролира бројот на детски процеси. Можни вредности:
static,ondemand,dynamic. Оваа опција е задолжителна.static- бројот на детски процеси е фиксен (pm.max_children).ondemand- процесите се создаваат на барање (кога се бараат, за разлика од динамичните, каде штоpm.start_serversсе стартуваат кога услугата е стартувана.dynamic- бројот на детски процеси се поставува динамички врз основа на следните директиви:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers. -
pm.max_childrenint -
Бројот на детски процеси што треба да се создадат кога
pmе поставен наstaticи максималниот број на детски процеси што треба да се создадат когаpmе поставен наdynamic. Оваа опција е задолжителна.Оваа опција ја поставува границата на бројот на истовремени барања што ќе бидат опслужени. Еквивалентно на директивата ApacheMaxClients со mpm_prefork и на PHP_FCGI_CHILDREN променливата на околината во оригиналниот PHP FastCGI.
-
pm.start_serversint -
Бројот на детски процеси создадени при стартување. Се користи само кога
pmе поставен наdynamic. Стандардна вредност: (min_spare_servers + max_spare_servers) / 2. -
pm.min_spare_serversint -
Посакуваниот минимален број на неактивни серверски процеси. Се користи само кога
pmе поставен наdynamic. Исто така задолжително во овој случај. -
pm.max_spare_serversint -
Посакуваниот максимален број на неактивни серверски процеси. Се користи само кога
pmе поставен наdynamic. Исто така задолжително во овој случај. -
pm.max_spawn_rateint -
Бројот на стапки за создавање детски процеси одеднаш. Се користи само кога
pmе поставен наdynamic. Стандардна вредност: 32 -
pm.process_idle_timeoutmixed -
Бројот на секунди по кои неактивен процес ќе биде убиен. Се користи само кога
pmе поставен наondemand. Достапни единици: s(екунди)(стандардно), m(инути), h(оди), или d(енови). Стандардна вредност: 10s. -
pm.max_requestsint -
Поставете rlimit на отворени дескриптори на датотеки за главниот процес. Стандардна вредност: системски дефинирана вредност. PHP_FCGI_MAX_REQUESTSБројот на барања што секое дете процес треба да ги изврши пред повторно да се појави. Ова може да биде корисно за да се заобиколат протекувањата на меморијата во библиотеки од трети страни. За бесконечно обработување на барањата, наведете '0'. Еквивалентно на
-
pm.status_listenstring -
Адресата на која да се прифатат барањата за статус на FastCGI. Ова создава нов невидлив пул што може да обработува барања независно. Ова е корисно ако главниот пул е зафатен со барања што долго се извршуваат бидејќи е сè уште можно да се добие FPM статус страница пред завршување на барањата што долго се извршуваат. Синтаксата е иста како и за listen директива. Стандардна вредност: none.
-
pm.status_pathstring -
URI за прегледување на FPM статус страница. Оваа вредност мора да започнува со водечка коса црта (/). Ако оваа вредност не е поставена, ниту еден URI нема да биде препознаен како статус страница. Стандардна вредност: none.
-
ping.pathstring -
URI за пинг за повикување на страницата за мониторинг на FPM. Ако оваа вредност не е поставена, ниту еден URI нема да биде препознаен како страница за пинг. Ова може да се користи за тестирање од надвор дека FPM е жив и реагира. Ве молиме имајте предвид дека вредноста мора да започнува со водечка коса црта (/).
-
ping.responsestring -
Оваа директива може да се користи за прилагодување на одговорот на барање за пинг. Одговорот е форматиран како text/plain со код за одговор 200. Стандардна вредност: pong.
-
process.priorityint -
Наведете ја приоритетната вредност nice(2) што треба да се примени на работниот процес (само ако е поставена). Вредноста може да варира од -19 (највисок приоритет) до 20 (најнизок приоритет). Стандардна вредност: не е поставено.
-
process.dumpablebool -
Поставете го знамето process dumpable (PR_SET_DUMPABLE prctl) дури и ако корисникот или групата на процесот се различни од корисникот на главниот процес. Ова овозможува создавање на core dump на процесот и ptrace на процесот за корисникот на пулот. Стандардна вредност: no. Од PHP 7.0.29, 7.1.17 и 7.2.5.
-
prefixstring -
Наведете префикс за евалуација на патеката
-
request_terminate_timeoutmixed -
Времето на чекање за сервисирање на едно барање по кое работниот процес ќе биде убиен. Оваа опција треба да се користи кога опцијата 'max_execution_time' во ini не го запира извршувањето на скриптата од некоја причина. Вредност од '0' значи 'Off'. Достапни единици: s(екунди)(стандардно), m(инути), h(ора), или d(енови). Стандардна вредност: 0.
-
request_terminate_timeout_track_finishedbool -
Времето на чекање поставено од request_terminate_timeout не се ангажира по fastcgi_finish_request или кога апликацијата завршила и се повикуваат внатрешни функции за исклучување. Оваа директива ќе овозможи ограничување на времето на чекање да се применува безусловно дури и во такви случаи. Стандардна вредност: no. Од PHP 7.3.0.
-
request_slowlog_timeoutmixed -
Времето на чекање за сервисирање на едно барање по кое ќе се исфрли PHP backtrace во датотеката 'slowlog'. Вредност од '0' значи 'Off'. Достапни единици: s(екунди)(стандардно), m(инути), h(ора), или d(енови). Стандардна вредност: 0.
-
request_slowlog_trace_depthint -
Длабочината на стекот на бавниот лог. Стандардна вредност: 20. Од PHP 7.2.0.
-
slowlogstring -
Датотеката за лог за бавни барања. Стандардна вредност:
#INSTALL_PREFIX#/log/php-fpm.log.slow. -
rlimit_filesint -
Поставете rlimit на отворени дескриптори на датотеки за процесите деца во овој пул. Стандардна вредност: системски дефинирана вредност.
-
rlimit_coreint -
Поставете rlimit за максимална големина на јадрото за процесите деца во овој пул. Можни вредности: 'unlimited' или цел број поголем или еднаков на 0. Стандардна вредност: системски дефинирана вредност.
-
chrootstring -
Chroot во оваа директорија на почетокот. Оваа вредност мора да биде дефинирана како апсолутна патека. Кога оваа вредност не е поставена, chroot не се користи.
-
chdirstring -
Chdir во оваа директорија на почетокот. Оваа вредност мора да биде апсолутна патека. Стандардна вредност: тековна директорија или / кога chroot.
-
catch_workers_outputbool -
Пренасочете stdout и stderr на работникот во главниот лог за грешки. Ако не е поставено, stdout и stderr ќе бидат пренасочени во /dev/null според FastCGI спецификациите. Стандардна вредност: не.
-
decorate_workers_outputbool -
Овозможете украсување на излезот за излезот на работниците кога catch_workers_output е овозможено. Стандардна вредност: да. Достапно од PHP 7.3.0.
-
clear_envbool -
Исчистете ја околината во FPM работниците. Спречува произволни променливи на околината да стигнат до FPM работните процеси со чистење на околината во работниците пред да се додадат променливите на околината наведени во оваа конфигурација на пул. Стандардна вредност: Да.
-
security.limit_extensionsstring -
Ги ограничува екстензиите на главниот скрипт што FPM ќе дозволи да ги парсира. Ова може да спречи грешки во конфигурацијата на страната на веб-серверот. Треба само да го ограничите FPM на .php екстензии за да спречите злонамерни корисници да користат други екстензии за извршување php код. Стандардна вредност: .php .phar
-
apparmor_hatstring -
Ако AppArmor е овозможен, тој овозможува промена на капа. Стандардна вредност: не е поставено
-
access.logstring -
Датотека за лог за пристап. Стандардна вредност: не е поставено
-
access.formatstring -
Формат на лог за пристап. Стандардна вредност:
"%R - %u %t \"%m %r\" %s":Валидни опции Заменски знак = NULL %%На %character%C%CPU искористено од барањето. Може да прифати следниве формати: %{user}Cсамо за кориснички CPU,%{system}Cсамо за системски CPU,%{total}Cза кориснички + системски CPU (стандардно)%dВреме потребно за сервисирање на барањето. Може да прифати следниве формати за прецизност: %{seconds}d(стандардно),%{milliseconds}d,%{microseconds}d%{name}eБројот на барања што секое дете процес треба да ги изврши пред повторно да се појави. Ова може да биде корисно за заобиколување на протекување на меморија во библиотеки од трети страни. За бесконечно обработување на барања, наведете '0'. Еквивалентно на $_ENV or $_SERVERПроменлива на опкружувањето (исто како %{REQUEST_METHOD}eor%{SERVER_PROTOCOL}e). Името на променливата мора да биде наведено во загради за да се специфицира името на променливата на опкружувањето. На пример, специфични за серверот како%{HTTP_HOST}eor%{HTTP_USER_AGENT}e%f, HTTP заглавија како %lContent-LengthИме на скрипта%mна барањето (само за HTTP POST барање) %MHTTP метод на барање %{bytes}M(стандардно),%{kilobytes}M%{kilo}M,%{megabytes}M,%{mega}M%nВрв на меморијата распределена од PHP. Може да прифати го следново формат: %{name}oИме на пул %{Content-Type}o,%{X-Powered-By}o,%{Transfer-Encoding}o%pИзлезна заглавие. Името на заглавието мора да биде наведено во загради. На пример: %PPID на детето што го сервисираше барањето %qPID на родителот на детето што го сервисираше барањето %QНа '?'Низа за прашање%qand%rкарактер, или лепило помеѓу%r, ако постои низа за прашање %qand%Q%RURI на барањето без низата за прашање, видете %sIP адреса на далечинскиот управувач %tСтатус (код на одговор) strftime(3)Време на серверот кога е примено барањето. Може да прифати а%d/%b/%Y:%H:%M:%S %zформат:strftime(3)форматот мора да биде затворен во%{<strftime_format>}tтаг, на пр. за временска низа форматирана во ISO8601, користете:%{%Y-%m-%dT%H:%M:%S%z}t%TВреме кога е запишано логот (кога барањето завршило). Може да прифати strftime(3)Време на серверот кога е примено барањето. Може да прифати а%d/%b/%Y:%H:%M:%S %z(стандардно). Наstrftime(3)форматот мора да биде затворен во%{<strftime_format>}Tтаг, на пр. за временска низа форматирана во ISO8601, користете:%{%Y-%m-%dT%H:%M:%S%z}T%uКорисник за автентикација со основни акредитиви, ако е специфициран во Authorizationheader -
access.suppress_patharray -
Список на вредности request_uri кои треба да се филтрираат од логот за пристап. Стандардна вредност: не е поставено. Од PHP 8.2.0.
Можно е да се проследат дополнителни променливи на околината и да се ажурираат PHP поставките на одреден пул. За да го направите ова, треба да ги додадете следните опции во конфигурациската датотека на пулот.
Пример #1 Проследување на променливи на околината и PHP поставки до пул
env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f [email protected] php_flag[display_errors] = off php_admin_value[error_log] = /var/log/fpm-php.www.log php_admin_flag[log_errors] = on php_admin_value[memory_limit] = 32M
php_value or
php_flag ќе ја презапишат нивната претходна вредност. Ве молиме имајте предвид дека дефинирањето
disable_functions or
disable_classes нема да ги презапише претходно дефинираните php.ini вредности, туку наместо тоа ќе ја додаде новата вредност.
Поставките дефинирани со php_admin_value and php_admin_flag
не можат да бидат презапишани со ini_set().
PHP поставките може да се постават во конфигурацијата на веб-серверот.
Пример #2 Поставување PHP поставки во nginx.conf
set $php_value "pcre.backtrack_limit=424242"; set $php_value "$php_value \n pcre.recursion_limit=99999"; fastcgi_param PHP_VALUE $php_value; fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www/htdocs";
Бидејќи овие поставки се проследуваат до php-fpm како fastcgi заглавја, php-fpm не треба да биде врзан за глобално пристапна адреса. Инаку, секој може да ги промени опциите за конфигурација на PHP. Погледнете исто така listen.allowed_clients.
Забелешка: Пулс не се механизам за безбедност, бидејќи не обезбедуваат целосна одвојување; на пр. сите пулови би користеле една OPcache инстанца.
Белешки од корисници 9 белешки
The 'include' directive that is used in php-fpm.conf is not documented here. However, this directive can also be used in the pool configurations. In the included file, the $pool variable is substituted correctly.
This means that, if you have multiple pools with similar configurations, you can create a file 'default-values.inc' like so:
-----
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = X
pm.min_spare_servers = X
pm.max_spare_servers = X
access.log = /var/log/php-fpm/$pool.access
access.format = "%R %u [%t] \"%m %r\" %s %d %l"
slowlog = /var/log/php-fpm/$pool.slow
php_flag[short_open_tag] = off
-----
And then include that file in each pool configuration like so:
-----
[vhost1.example.com]
user = www-vhost1
group = www-vhost1
listen = 127.0.0.1:9001
include = /usr/local/etc/php-fpm.d/default-values.inc
-----
This makes things a bit more transparent, and it could potentially save some time if you decide to change settings.
Make sure the name of the included file does not end in '.conf', because all files with that extension are loaded from php-fpm.conf.the doc is lacking a lot of things it seems.
The php fpm exemple config file indicate different thing, more option etc... I wonder why the main documentation is less verbose that the configuration file that user can have .. or not have ?PHP-FPM configuration page apparently doesn't see the need to specify what options are available with each version of PHP.
It claims that pm.status_listen is a valid directive, but that directive only exists as of php 8.0.0, which is a bummer for those of us still using PHP 7.4.
Noting this for anyone else fighting with this.; The access log format.
; The following syntax is allowed
; %%: the '%' character
; %C: %CPU used by the request
; it can accept the following format:
; - %{user}C for user CPU only
; - %{system}C for system CPU only
; - %{total}C for user + system CPU (default)
; %d: time taken to serve the request
; it can accept the following format:
; - %{seconds}d (default)
; - %{milliseconds}d
; - %{milli}d
; - %{microseconds}d
; - %{micro}d
; %e: an environment variable (same as $_ENV or $_SERVER)
; it must be associated with embraces to specify the name of the env
; variable. Some examples:
; - server specifics like: %{REQUEST_METHOD}e or %{SERVER_PROTOCOL}e
; - HTTP headers like: %{HTTP_HOST}e or %{HTTP_USER_AGENT}e
; %f: script filename
; %l: content-length of the request (for POST request only)
; %m: request method
; %M: peak of memory allocated by PHP
; it can accept the following format:
; - %{bytes}M (default)
; - %{kilobytes}M
; - %{kilo}M
; - %{megabytes}M
; - %{mega}M
; %n: pool name
; %o: output header
; it must be associated with embraces to specify the name of the header:
; - %{Content-Type}o
; - %{X-Powered-By}o
; - %{Transfert-Encoding}o
; - ....
; %p: PID of the child that serviced the request
; %P: PID of the parent of the child that serviced the request
; %q: the query string
; %Q: the '?' character if query string exists
; %r: the request URI (without the query string, see %q and %Q)
; %R: remote IP address
; %s: status (response code)
; %t: server time the request was received
; it can accept a strftime(3) format:
; %d/%b/%Y:%H:%M:%S %z (default)
; The strftime(3) format must be encapsulated in a %{<strftime_format>}t tag
; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
; %T: time the log has been written (the request has finished)
; it can accept a strftime(3) format:
; %d/%b/%Y:%H:%M:%S %z (default)
; The strftime(3) format must be encapsulated in a %{<strftime_format>}t tag
; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
; %u: remote user
;
; Default: "%R - %u %t \"%m %r\" %s"
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{milli}d %{kilo}M %C%%"
https://github.com/php/php-src/blob/master/sapi/fpm/www.conf.in#L257-L318The default value for listen.backlog isn't exactly "unlimited".
It's 128 on some operating systems, and -1 (which doesn't mean "unlimited" as well, but is an alias to a hard limit) on other systems.
Check for a sysctl value like kern.somaxconn (OpenBSD) or net.core.somaxconn (Linux).
Crank it up if you need more PHP workers than the default value. Then adjust listen.backlog in your php-fpm configuration file to the same value.
-Frank.With Apache, mod_proxy_fcgi and php-fpm, if you want to have a generic pool and several vhost with different php configuration, you can use the ProxyFCGISetEnvIf directive and the PHP_ADMIN_VALUE environment variable. It does not work with PHP_ADMIN_FLAG even for boolean directives.
PHP directives must be separated by spaces and a \n.
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "open_basedir=/var/www/toto/:/tmp/ \n session.save_path=/var/www/toto/session \n display_errors=On \n error_reporting=-1"NOTE: "access.format" containing "%o" generate error in PHP 7.4 (don't tested in other versions)Be very carrefull when using ProxyFCGISetEnvIf within a Apache virtual host configuration using a shared PHP-FPM pool. Values defined like this are shared across all the Apache virtual hosts within a pool worker, may resulting in strange behaviours depending on the requests chronology.
See full explanation here:
https://serverfault.com/questions/817020/stop-reusing-php-value-for-different-sites-with-php-fpm/817905#817905