Назад | Перейти на главную страницу

nginx обрабатывает несколько местоположений для одного сервера

Мне нужно настроить виртуальный хост для запуска моего 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 директивы. Вы также можете развернуть регулярное выражение для домашнего каталога пользователя, если хотите включить в него больше символов.

В (?:~)? часть соответствует необязательному ~ символ в имени пути.