LINUX.ORG.RU
ФорумAdmin

apache+php: модуль или fastcgi

 ,


0

1

Нужен ответ от спецов по настройке web-сервера apache. Вернее вопроса 3:

1. Какой способ взаимодействия apache лучше: через модуль php7_module или через fastcgi? Обоснуйте почему. Желателен способ при котором расход памяти будет меньше.

2. Если я в качестве мультипроцессной модели apache выбираю worker могу ли использовать способ взаимодействия с помощью модуля? Вроде модулей в пакете php 2: libphp7.so и libphp7-zts.so и первый работает только с prefork, но я в этом не уверен.

3. Для меня важно, чтобы php вёл логи ошибок для каждого виртуального хоста. При использовании взаимодействия при помощи модуля я использую директиву php_value для переопределения параметра php error_log, вписываю в .htaccess строку

php_value error_log "/var/www/myvirthost.ru/php_errors.log"
в результате чего у меня файл лога ошибок php пишется в каталоге сайта. Если буду использовать вместо модуля fastcgi, можно ли будет реализовать подобное?

★★★★★

Ответ на: комментарий от sunny1983

Не совсем. Фастцги «воркеры» управлялить извне, дёргался обычный php-cgi бинарь, а фпм это уже средствами самого пхп.

deep-purple ★★★★★ ()

Не получил ответа на вопросы какой способ лучше и как переопределять расположение лога ошибок php отдельно для каждого виртуального хоста при использовании fastcgi.

sunny1983 ★★★★★ ()
Ответ на: комментарий от sunny1983

При использовании Nginx + PHP-FPM можно перенаправлять PHP-шные ошибки в Nginx error.log. Ну а на уровне Nginx можно уже разбить логи по доменам. Исключение - это когда соединение Nginx с PHP-FPM рвется по таймауту (например 504-й код) - тогда диагностика, естественно, отсутствует.

Погугли: php-fpm stderr to nginx error log

Поставь себе тестовую конфигурацию где-нибудь и посмотри, устроит ли тебя это.

vinvlad ()
Ответ на: комментарий от sunny1983

Ну если ты такой ленивый, чтобы погуглить, то можешь глянуть:
https://wiki.apache.org/httpd/php

:)

По большому счету, если использовать fastcgi-вариант, то Apache на фиг не нужен, разве что, это требование владельцев соответствующих доменов.

Если будешь использовать модуль proxy_fcgi + php-fpm, то апач будет получать php-шные ошибки по fastcgi-протоколу и, по идее, должен складывать их в свои error-логи (так же как и Nginx). Это можно легко проверить.

vinvlad ()
Ответ на: комментарий от sunny1983

... ну и еще один существенный момент относительно fastcgi и php-fpm: при использовании этого варианта запросы всех доменов по умолчанию будут обрабатываться в PHP с правами одного пользователя (обычно - www-data). Можно, конечно, конфигурить для каждого домена в php-fpm отдельный пул процессов с соответствующим TCP-портом, пользователем и другими настройками, но это не самый оптимальный и удобный вариант при наличии большого количества доменов, особенно, если сервер используется для предоставления услуг хостинга.

vinvlad ()
Ответ на: комментарий от sunny1983

Четыре звезды, а читать до сих пор не научился.

anonymous ()
Ответ на: комментарий от vinvlad

Немного не тот ответ, на который я рассчитывал: «Собери тестовую конфигурацию и неделю с ней потрахайся, тогда поймёшь». Я всё же рассчитывал на отзыв опытных админов, которые имели дело не с одним десятком конфигураций хостинга. Хочу заранее знать получу я какой-либо профит, если переключу mpm апача с prefork на worker, а модуль на fastcgi. nginx пробовать я не хочу. А цель - сэкономить на ресурсах, не теряя производительности. Я использую VDS, на которой каждый мегабайт оперативы на счету.

sunny1983 ★★★★★ ()
Ответ на: комментарий от sunny1983

1. Тебе нужно понять какой будет профиль нагрузки. Например, время обработки запроса 1с, запросы идут примерно 10рпс с резкими пиками до 20, а один префорк при обработке запроса использует 128М памяти. Тогда тебе нужно будет держать примерно 17 префорков чтобы более-менее ловить эти пики, то есть среднее потребление памяти будет 17*128. Учитывай, что индеец не форкает новых чаще чем раз в секунду. В большинстве случаев, 7 из этих 17 будут просто висеть. Пхп имеет свойство течь по памяти, поэтому они будут висеть с этими утечками. А если пик будет больше, то он может не успеть нафоркать новых и клиент может не получить страничку.

2. Индеец-рабочий работает в тредах, а php потоконебезопасен, и в результате у тебя может получиться фарш в памяти. А с php-zts несовместима часть модулей, особенно нативных. И это очень слабо тестируется. Может выйти неловкая ситуация.

3. Я бы предложил сделать несколько пулов fpm, каждый пул с chroot и своим логом.

Если ты хочешь экономить, зря отказывавется от nginx, он намного легче индейца, проще и очевидней настраивается.

anonymous ()
Ответ на: комментарий от sunny1983

Хочу заранее знать получу я какой-либо профит, если переключу mpm апача с prefork на worker, а модуль на fastcgi.

Ну хорошо, давай тогда примем допущение, что тебе по фигу на вопросы безопасности (все можно выполнять с правами одного пользователя), ну и порассуждаем...

Если ты выносишь выполнение PHP-кода в FastCGI-сервер (PHP-FPM), то ресурсы самого Apache у тебя тратяться только на выдачу статики и проксирование запросов к PHP-части (трасляцию туда-сюда TCP-трафика). Соответственно, при таком варианте у тебя уже нет необходимости выполнять запросы в контексте Apache в рамках отдельных процессов - ты можешь спокойно использовать любой mpm-режим (хотя в плане эффективности использования ресурсов разумнее перескочить здесь на Nginx).

Ну а PHP-FPM настраиваешь, как тебе нужно - там настройки пула процессов аналогичны апачевским. Но только здесь ты уже задаешь параметры именно для PHP-шной части - у тебя не перемешано всё в одну кучу. А дальше думай сам - нужно ли тебе это...

Понятно, что при таком разделении ты можешь более оптимально организовать выдачу статики и более четко выделить ресурсы под PHP-шную часть. Но никто кроме тебя не знает, какая доля запросов у тебя приходится на статику, а какая - на PHP. Соответственно, никто тебе никаких прогнозов и не выдаст - вопросы задаешь слишком абстрактные...

vinvlad ()
Ответ на: комментарий от sunny1983

цель - сэкономить на ресурсах, не теряя производительности
> nginx пробовать я не хочу

/0

deep-purple ★★★★★ ()
Ответ на: комментарий от sunny1983

... Ты бы хотя б сказал в стартовом топике, те домены, что крутятся на сервере - твои или чужие. Разница-то большая... Сомневаюсь, что кого-то очень сильно обрадует, что его PHP-код будет доступен на чтение для всех соседей. А если заводить отдельные пулы PHP-шных процессов для доменов, то теряется гибкость использования ресурсов и не понятно, даст ли выгоду использование FastCGI. Тут может быть более оптимальным вариантом поставить Nginx перед Apache - чисто для выдачи статики, а Apache использовать только для выполнения PHP-шных запросов - и настроить соответствующим образом. Тоже вариант...

vinvlad ()
Ответ на: комментарий от sunny1983

Хочу заранее знать получу я какой-либо профит, если переключу mpm апача с prefork на worker

нет/мизер.

nginx пробовать я не хочу

зря. с fpm хорошо, с unit ещё лучше.

которые имели дело не с одним десятком конфигураций хостинга

это я.

SevikL ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.