linux 上跨子域上传文件的共享目录

Shared directory for file upload across subdomains on linux

我有 2 个模块必须共享特定上传文件的公共目录。

instructor.example.com 和 registrar.example.com

那么我想知道的是,你们做了什么让他们有一个用于文件上传的公共目录以及该目录放在哪里?

因为 registrar.example.com 的用户必须能够访问教师用户的目录,上传文件的特定目录。

例如将其命名为“instructor_registrar/{instructor-id}/ 因为我有强迫症。

我已经进行了研究,我发现有 1 个人和我有类似的问题,但他们只是说“你可以把它放在任何地方”。所以我想知道应该在哪里创建目录。

这可以通过 linux 目录/文件权限来完成。

假设:

  • 站点 1:在用户 siteuser1 和组 sitegroup1 下运行。该特定站点的所有目录和文件均归 siteuser1sitegroup1 所有。
  • 站点 2:在用户 siteuser2 和组 sitegroup2 下运行。该特定站点的所有目录和文件均归 siteuser2sitegroup2 所有。

对于你的共享目录和文件,这样设置:

  • /shared_dir/fileA,文件 B,文件 C,...

  • 该目录应属于 someusersomegroup

  • 将用户 siteuser1siteuser2 放入 somegroup

  • 像这样设置权限:

    drwxr-x--- someuser somegroup /shared_dir/
    -rw-r----- someuser somegroup /shared_dir/fileA
    -rw-r----- someuser somegroup /shared_dir/fileB
    ...
    

这样组 somegroup 中的所有用户都可以访问这些文件。

您可以将 others 权限赋予 r--,但我不喜欢向每个用户授予目录或文件的读取权限。


编辑:

对于共享目录的位置,站点特定目录之外的任何位置都可以。并且不要忘记在 Apache 配置中使用 <Directory ...> 部分声明它。

假设您的网站文件位于 /opt/apache/htdocs_instructor/opt/apache/htdocs_registrar 下,您可以 /opt/apache/htdocs_shared

所以我想出了一个替代方案。 这就是我所做的。我在 1 个子域中有 2 个框架。

/var/www/staff.example.com/instructor/
/var/www/staff.example.com/registrar/

我在里面新建了一个目录:

sudo mkdir /var/www/staff.example.com/uploads/shared_dir/

并将隐私设置为 755

sudo chmod -R 755 /var/www/staff.example.com/uploads/shared_dir/

并将所有者设置为 root

sudo chown -R $USER:$USER /var/www/staff.example.com/uploads/shared_dir/ 并将我的 $upload_path 文件上传模型设置为

$uploadpath = $_SERVER[DOCUMENT_ROOT'].'/uploads/shared_dir/';

因为如果用户是新用户,我需要创建一个个人目录。我将所有文件设置在 /var/www/ 属于 apache 和所有组和用户,并为 www-data 组的所有成员启用读写文件,以便在上传文件之前创建我的 mkdir()

mkdir($_SERVER['DOCUMENT_ROOT'].'/uploads/shared_dir/'.$_SESSION['user_id'], 0777, true);

(我不推荐,但我就是这么做的)

chown -R www-data:www-data /var/www/
chmod -R g+rw /path/to/webserver/www

这解决了我在根或框架之外上传文件的问题。