Как настроить 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»? Везде статьи только для однопользовательского сервера, что совершенно не приемлемо.


Спасибо за внимание.
  • Вопрос задан
  • 18546 просмотров
Решения вопроса 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.
Главное неудобство — необходимо создавать минимальное окружение для каждого пользователя и поддерживать его в актуальном состоянии, но для этого есть немало готовых скриптов.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы