使用 nginx 在主目录中托管文件夹

使用 nginx 在主目录中托管文件夹

我想在 adduser 脚本中添加一个条件来更新 nginx.conf,以便它将 ~/www 加载为http://ip地址/~用户每当我创建一个新用户时。

当用户名为 www.domainname 时,它​​会将该域名托管在 ~/www 文件夹中。

是否有一个脚本可以做到这一点?

答案1

创建用户时,您无需向 nginx 添加任何内容。只需在服务器块中使用类似以下内容:

location ~ ^/~(.+?)(/.*)?$ {
    alias /home/$1/www$2;
    autoindex on;
}

检查你的发行版 /etc/skel

如果您 mkdir /etc/skel/www,则由 adduser(或您的发行版 adduser-script)创建的所有用户目录将默认具有此目录。

答案2

我偶然发现了这一点,接受的答案对我来说非常可疑。正如 Nick ODell 在接受的答案的评论中指出的那样,它可能容易受到目录遍历攻击。

更好的解决方案是在服务器块中有一个主 Web 根目录,然后使用从 Web 根目录到用户目录的符号链接。您可以让多个符号链接指向同一个目标目录:

/var/www/user1 -> /home/user1/www
/var/www/domainname -> /home/user1/www

这种方法也更适用于try_files

相关内容