Запуск сайтов от разных пользователей nginx + php-fpm

25 мая 2018, 12:51

По умолчанию, все сайты запускаться от пользователя (www-data), указанного в настройках php-fpm.


Внимание: Использую версию PHP 7.2, для других версий пути могут отличаться.

Чтобы запускать сайты от разных пользователей, необходимо:


  1. Создать несколько пользователей.
  2. Создать отдельные конфигурационные файлы и настроить php-fpm.
  3. Создать отдельные конфигурационные файлы и настроить nginx.
  4. Перезапустить сервисы и создать контент.

Пользователи


Создаем пользователя site с домашним каталогом, оболочкой /bin/bash и пароль.


useradd -g www-data -m -d /var/www/site/ -s /bin/bash site
passwd site


Настройка php-fpm


Создать отдельные конфигурационные файлы в директории /etc/php/7.2/fpm/pool.d,
убедившись при этом, что в файле /etc/php/7.2/fpm/php-fpm.conf указана строчка

include=/etc/php/7.2/fpm/pool.d/*.conf

Создать файл site.conf и пишем содержимое:


[site.ru]
pm = dynamic
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_children = 5
pm.max_spare_servers = 5
listen = /run/php/php7.2-fpm-site.sock
listen.mode = 0660
listen.owner = site
listen.group = www-data
user = site
group = www-data
chdir = /
php_admin_value[upload_tmp_dir] = /var/www/site/tmp
php_admin_value[session.save_path] = /var/www/site/tmp


Создать папку /var/www/site/tmp

Настройка nginx


Создать отдельные конфигурационные файлы в директории /etc/nginx/sites-available/
Создать файл site.conf и пишем содержимое:


upstream site.ru {server unix:/run/php/php7.2-fpm-site.sock;}
server {
	listen 80;
	root /var/www/site/html;
	index index.php index.html index.htm;
	server_name site.ru;
	location / {
		try_files $uri $uri/ /index.php?q=$uri&$args;
	}
	location ~ \.php$ {
		fastcgi_pass unix:/run/php/php7.2-fpm-site.sock;
		include fastcgi_params;
		include snippets/fastcgi-php.conf;
		fastcgi_keep_conn on;
		fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f noreply@site.ru";
		fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
		fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
	}
	location ~ /\.ht {
		deny all;
	}
}


По умолчанию, в Debian все файлы настройки виртуальных доменов создаются в каталоге /etc/nginx/sites-available,
а на все активные сайты создаются символические ссылки на этот файл в каталоге /etc/nginx/sites-enable


ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/site.ru


Готово. Теперь перезапустить сервисы и проверить.


service nginx restart
service php7.2-fpm restart

Содержимое файла index.php для проверки
<?php
// Показывать всю информацию, по умолчанию INFO_ALL
phpinfo();

// Показывать информацию только о загруженных модулях.
phpinfo(INFO_MODULES);
?>
Поделиться
21 комментарий
abba-trans.com

спасибо, сработало!

abba-trans.com

(like)

DennisFah

просто шикарно.
Отличный мануал.

Geogiypt56

спасибо

Andrewapord

я на счет рекламы

Kovalenkopt22

нужная вещь

abba-trans.com

кратко и ясно

Andrewapord

Класс!

GeorgeTup

Подобных мануалов много, хорошо что кратко и по делу

Mikhailpt21

Помогло

Andrewapord

годно

SEOtam

работает

Smirnovpt43

интересно

Frankagirm

как раз искал статью для этого

saaSlign

помогло!

AndryTiene

Спасибо

Elmeragefs

годно

NormanInelo

пригодиться

advokatIcorm

спасибо)

GeorgeTup

Спасибо

Orlandoinfiz

интересно