По умолчанию все сайты будут запускаться от пользователя, указанного в настройках php-fpm. Чтобы запускать сайты от разных пользователей, необходимо создать отдельные конфигурационные файлы в директории /etc/php5/fpm/pool.d
, убедившись при этом, что в файле /etc/php5/fpm/php-fpm.conf
указана строчка:
include=/etc/php5/fpm/pool.d/*.conf
Теперь создаем файл конфигурации для нашего сайта (покажу на примере neblog.info) /etc/php5/fpm/pool.d/beroot.su.conf
:
[neblog.info] listen = /var/run/php5-neblog.info.sock listen.mode = 0666 user = neblog group = neblog chdir = /home/www/sites/neblog.info php_admin_value[upload_tmp_dir] = /home/www/sites/neblog.info/tmp php_admin_value[soap.wsdl_cache_dir] = /home/www/sites/neblog.info/tmp php_admin_value[date.timezone] = Europe/Moscow php_admin_value[upload_max_filesize] = 100M php_admin_value[post_max_size] = 100M php_admin_value[open_basedir] = "/home/www/sites/neblog.info/" php_admin_value[session.save_path] = /home/www/sites/neblog.info/tmp php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source php_admin_value[cgi.fix_pathinfo] = 0 php_admin_value[apc.cache_by_default] = 0 # В зависимости от нагрузки меняем параметры pm = dynamic pm.max_children = 10 pm.start_servers = 2 pm.min_spare_servers = 2 pm.max_spare_servers = 4
В файле настроек /etc/nginx/sites-available/neblog.info.conf
указываем сокет:
upstream neblog {server unix:/var/run/php5-neblog.info.sock;} server { listen 80; server_name neblog.info www.neblog.info; ... location ~ \.php$ { include fastcgi.conf; fastcgi_intercept_errors on; fastcgi_pass neblog.info; } ... }
Перезапускаем php-fpm и nginx:
sudo /etc/init.d/php5-fpm restart sudo /etc/init.d/nginx restart
Теперь сайт будет запускаться от указанного пользователя.
На ubuntu 14.04 не работает по этому ману.
Конкретизируйте, что именно не работает. Здесь привязки к дистрибутиву вообще нет, так что, скорее всего, Вы что-то не так делаете.
P.S. Проверил, у меня на одном из серверов стоит Ubuntu 14.04.4 LTS и там всё прекрасно работает.
Вместо user мой пользователь ну и вместо site мой сайт.
Настроил таким образом:
1. vi /etc/php5/fpm/pool.d/site.conf
[site]
user = user
group = user
listen = /var/run/php5-fpm-site.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
2. service php5-fpm restart
Проверка или появился новый pool
3. ps aux |grep user
4. vi /etc/php5/fpm/conf.d/05-opcache.ini
В целях безопасности отключаем кэширование:
opcache.enable=0
5. service php5-fpm restart
6. vi /etc/nginx/sites-available/site
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm-site.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
7. service nginx restart
Таким образом удалось настроить запуск сайта от другого пользователя на Ubuntu 14.04
Вы так и не описали суть проблемы, что конкретно не получилось настроить по приведенному мануалу?
В Вашем примере я вижу добавленные директивы:
А также не понятно зачем
chdir
, установленный в корень.Поправил chdir :
/var/www/site/user/public_html
В суть проблемы я не вникал просто настроил по другому ману и все заработало, спасибо что откликнулись )
А собственно в каком месте мы запускаем сайт под другим пользователем? Мы только обработчик php запускаем под другим, сам то nginx как работал от имени www-data (или ngnix) так и работает. Если мы сверху ваш понуал польем каки то ftp сервером (а именно для этого обычно разбрасывают пользователей) то могут быть проблемы со статикой
Данную настройку я выполнял для других целей. Nginx разруливает запросы, а php обрабатывается php-fpm. Поэтому если будет взломан один из сайтов, то злоумышленник будет ограничен правами пользователя, указанного в настройках пула в php-fpm.
Аааа понял, меня то гугл на запрос о проблемах с ftp к вам привел 🙂
Извините — я начинающий. Пояснительная поподробнее суть этой статьи? Тут речь идет о случае предоставления услуг хостинга, то есть такая конфигурация поможет разграничить права между дирикториями
Предоставлением хостинга никогда не занимался, Вам лучше стоит почитать специализированные мануалы на эту тему.
Используйте Docker или LXC для разделения виртуальных хостов, из контейнера не вылезут, любую версию php можно развернуть под заказ
А какие права на директории нужно выдавать для Nginx и php-fpm если fpm работает от пользователя в /home/user и имеет такое дерево
$tree
.
├── domains
│ └── domain.ru
│ ├── index.html
│ └── info.php
├── etc
├── logs
│ ├── nginx
│ │ ├── domain.ru-access.log
│ │ └── domain.ru-error.log
│ ├── php
│ │ ├── php56-fpm-error.log
│ │ └── php56-fpm-slow.log
│ └── vsftp
└── tmp
Я сейчас не вспомню, какая у меня использовалась структура на тот момент, но по логике файлы сайта принадлежат пользователю, указанному в пуле php-fpm, а логи — пользователям, от которых запускаются nginx и php-fpm соответственно.
Пытаюсь настроить для php7.0-fpm + nginx/1.13.0
nginx работает под юзером www-data
соответственно в /etc/php5/fpm/pool.d/beroot.su.conf:
user = neblog
group = neblog
(neblog это для примера)
Не могу настроить права для корректной работы
php_admin_value[upload_tmp_dir] = /home/www/sites/neblog.info/tmp
php_admin_value[session.save_path] = /home/www/sites/neblog.info/tmp
Если закомментировать эти строки, то удаётся нормально работать с сессиями php, если не комментировать, то вываливается критическая ошибка при попытке создать сессию php. В логах пишет нет доступа.
Какие у вас указаны права на эти папки? Я пробовал владельцем ставить и neblog и www-data, не работает.
При попытке загрузить файлы на сервер опять же возникает ошибка прав доступа.
Как вы решаете данную проблему?
На сколько я понимаю проблему, получается что nginx работает под юзером www-data, а php работает под юзером neblog и они не имеют прав для просмотра и изменения файлов друг друга, т.к. пользователи разные. Как обойти эту прблему?
Можете дать им общую группу и права на запись для группы. Или пути изменить на /tmp, туда доступ есть у всех.
Если им давать общую группу, тогда смысл в разграничениях доступа? Ведь все сайты будут в одной группе и каждый сможет получить доступ к каждому. Путь /tmp попробю
Ну так права для группы то можно только на директорию tmp назначить.
У меня не осталось структуры, которая была реализована на тот момент, а настраивать и тестировать сейчас времени нет.