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
下运行。该特定站点的所有目录和文件均归 siteuser1
和 sitegroup1
所有。
- 站点 2:在用户
siteuser2
和组 sitegroup2
下运行。该特定站点的所有目录和文件均归 siteuser2
和 sitegroup2
所有。
对于你的共享目录和文件,这样设置:
/shared_dir/fileA,文件 B,文件 C,...
该目录应属于 someuser
和 somegroup
。
将用户 siteuser1
和 siteuser2
放入 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
这解决了我在根或框架之外上传文件的问题。
我有 2 个模块必须共享特定上传文件的公共目录。
instructor.example.com 和 registrar.example.com
那么我想知道的是,你们做了什么让他们有一个用于文件上传的公共目录以及该目录放在哪里?
因为 registrar.example.com 的用户必须能够访问教师用户的目录,上传文件的特定目录。
例如将其命名为“instructor_registrar/{instructor-id}/ 因为我有强迫症。
我已经进行了研究,我发现有 1 个人和我有类似的问题,但他们只是说“你可以把它放在任何地方”。所以我想知道应该在哪里创建目录。
这可以通过 linux 目录/文件权限来完成。
假设:
- 站点 1:在用户
siteuser1
和组sitegroup1
下运行。该特定站点的所有目录和文件均归siteuser1
和sitegroup1
所有。 - 站点 2:在用户
siteuser2
和组sitegroup2
下运行。该特定站点的所有目录和文件均归siteuser2
和sitegroup2
所有。
对于你的共享目录和文件,这样设置:
/shared_dir/fileA,文件 B,文件 C,...
该目录应属于
someuser
和somegroup
。将用户
siteuser1
和siteuser2
放入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
这解决了我在根或框架之外上传文件的问题。