Как настроить nginx + php_fastcgi с функциональностью Apache_mpm_itk + mod_php?

Здравствуйте. Недавно я написал статью habrahabr.ru/post/159203/

В комментариях к ней неоднократно указывались, что лучше всего из связки убрать сервер Apache. Мне захотелось раскопать данную тему поглубже.


Во время раскопок у меня возник вопрос указанный в сабж.


Смысл вопроса заключается в том, что на хостинге имеются N сайтов. Каждый сайт должен выполняться от определенного не привилегированного пользователя, который имеет право изменять файлы только в своем каталоге.


При связки Apache_mpm_itk + mod_php (+ прокси nginx) это сделать просто. Там возможно для каждого виртуального хоста указать пользователя который будет выполнять операции.


Как добиться такого с nginx + php_fastcgi? Пожалуйста укажите куда мне копать, возможно статьи, возможно разъяснения. Лично я даже не знаю какой запрос для поисковика задать — «php fastcgi multiuser»? Везде статьи только для однопользовательского сервера, что совершенно не приемлемо.


Спасибо за внимание.
  • Вопрос задан
  • 14403 просмотра
Решения вопроса 1
kyberorg
@kyberorg
php-fpm позволяет делать разные пулы (pools) на разных портах.
Каждый пул имеет юзера и группу с которыми запускаются все процессы этого пула.
А со стороны nginx просто прописывается нужный upstream.
Примерно так:
location ~ \.php$ {
include /usr/local/etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:8003; — где 8003 это порт, где висит php-fpm.
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Sky4eg
@Sky4eg
Web разработчик
Я делал несколько иначе. Вот пример на ubuntu

фрагмент конфига сайта
/etc/nginx/sites-available/site.ru

 location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }


далее фрагмент
/etc/php5/fpm/pool.d/site.ru.conf

; Start a new pool named 'www'.
; the variable $pool can we used in any directive and will be replaced by the
; pool name ('www' here)
[site.ru]

...

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = sky
group = sky

...

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses on a
;                            specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
;listen = 127.0.0.1:9000
listen = /var/run/php5-fpm.sock

...

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
;                 mode is set to 0666
listen.owner = sky
listen.group = sky
listen.mode = 0666

...


После это сайт работает от имени пользователя, в данном случае sky
Ответ написан
kotomyava
@kotomyava
Системный администратор
Ещё к вышесказанному:
Для большей изоляции можно загонять каждого пользоватея(каждый пулл) в chroot, это также умеет делать php-fpm.
Главное неудобство — необходимо создавать минимальное окружение для каждого пользователя и поддерживать его в актуальном состоянии, но для этого есть немало готовых скриптов.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
ИМАГ Москва
от 70 000 до 90 000 руб.
Original Group Москва
от 130 000 до 180 000 руб.
New Technologies Самара
от 80 000 до 150 000 руб.