Мне нужно настроить виртуальный хост для запуска моего users.example.com
интернет сайт. Ему нужна поддержка PHP через php-fpm. Идея состоит в следующем:
users.example.com/~user1/folder/file.php
-> /home/user1/www/folder/file1.php
users.example.com/user1/folder/file.php
-> /home/user1/www/folder/file1.php
users.example.com/~user2/stuff/about.html
-> /home/user2/www/stuff/about.html
и так далее. Файлы каждого пользователя запускаются в отдельном пуле PHP-FPM (то есть в другом сокете fpm) из соображений безопасности. У сокета полный путь выключен /var/run/{USERNAME}_fpm.sock
. Как я могу сделать эту конфигурацию сервера?
Первоначальная идея - иметь server { }
, с участием server_name users.example.com;
и location
с другим root
для каждого пользователя. Я хотел бы знать, работает ли это и как это работает.
Сам я не тестировал, но что-то вроде этого может сработать
server {
server_name users.example.com;
listen 80;
location ~ /(?:~)?(?<user>[a-zA-Z0-9]+)/ {
alias /home/$user/www/;
fastcgi_pass /var/run/$user_fpm.sock;
}
}
Итак, в строке местоположения мы записываем имя пользователя в переменную $ user, а затем используем эту переменную для alias
и fastcgi_pass
директивы. Вы также можете развернуть регулярное выражение для домашнего каталога пользователя, если хотите включить в него больше символов.
В (?:~)?
часть соответствует необязательному ~
символ в имени пути.