我想做的是让通常的服务器运行这样的用户文件:
http://users.example.com/~user1/stuff.php
它将存储在某处/home/user1/www
或类似的地方,但以该用户的权限运行。因此,/home/user1/www
目录中的脚本无法访问/home/user2/www
目录中的文件/文件夹(除非 UNIX 权限允许)。
我阅读解决方案使用虚拟主机并为每个虚拟主机一个新的池,但对于数百个用户来说这可能太重了。有什么解决方法吗?
请注意,我在 Raspberry Pi 中运行 nginx,所以这只是一个家庭项目,没什么真正严肃的。
答案1
由于 nginx 不直接运行 php,而是将请求转发到 php 应用程序,因此您关心 php 二进制文件运行的方式。我假设您正在运行 php-fpm,但总体思路并非特定于 php-fpm。
这php-fpm 的配置页面显示可以设置的指令。我们对user
和params感兴趣group
,因为它们控制 php 实例将运行的用户和组(以及脚本将运行的权限)。该chroot
指令也可能对创建安全系统感兴趣(您可能希望限制每个用户只能访问 中可用的文件/home/user1/www
,而不是目录层次结构中更高的文件)。
如您所见,它们是按每个池设置的。
因此,您可以创建多个池,每个用户一个,并让每个池在该用户和组下运行。您还可以 chroot 到该用户的 Webroot。这是您链接的解决方案。
但由于您必须为每个用户设置一个新的 php-fpm 池,因此这不是您可以按需执行的操作。相反,请将创建 php-fpm 池作为用户创建过程的一部分。