nginx 为一台服务器处理多个位置

nginx 为一台服务器处理多个位置

我需要设置一个虚拟主机来运行我的users.example.com网站。它需要通过 php-fpm 支持 PHP。想法是进行如下映射:

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。我想知道这是否可行,以及如何设置才能使它工作。

答案1

我自己还没有测试过,但类似这样的方法可能会有效

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 变量中,然后将该变量用于aliasfastcgi_pass指令。如果您想在用户主目录中包含更多字符,还可以扩展正则表达式。

该部分与路径名中的(?:~)?可选字符匹配。~

相关内容