我的本地网络上有一个 SMB 文件共享。我把所有网站都存储在这台服务器上。我还有另一台运行 CentOS 的服务器托管着一个 Apache Web 服务器。如何创建指向 SMB 共享的虚拟主机?
SMB 服务器的路径是smb://10.0.0.177/fms%20studios/Websites
。
这就是我目前文件中的内容httpd-vhosts.conf
。
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName tree.fmsds.xyz
ServerAlias www.tree.fmsds.xyz
DocumentRoot "smb://10.0.0.177/fms%20studios/Websites/"
<Directory "smb://10.0.0.177/fms%20studios/Websites/">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
答案1
有两个不同的问题可以解决您的问题:
验证:假设您的 Windows 机器正在提供“fms 工作室“网络共享,这种共享很有可能是”受保护“以便远程访问需要用户名/密码对;
访问方法:您的 Apache 需要知道其虚拟主机的文档根目录位于何处。根据您的问题,您“猜测”“smb://”前缀将使 Apache 知道/处理对 SMB 共享的远程访问。
让我们开始讨论第 2 点。正如你所看到的官方文档这 ”文档根目录“指令需要目录路径。这通常是在本地机器的文件系统中定义的“本地”路径。
这是不是对你来说,这是一个问题,因为完全有可能在我们的本地文件系统“内部”安装远程 SMB 网络共享。在你首选的搜索引擎上搜索“linux smb mount”,或者从以下位置开始调查这里。这将允许您在类似 的路径下访问您的 SMB 共享/mnt/server_win2012/fms%20studios
。您可以将其视为相当于 - 就像 Windows 世界一样 - 访问具有映射到远程路径的驱动器号的网络共享,而不是\\<something>
直接从 Explorer 访问 UNC 路径(...以 开头)。
所以,现在您可以让 Apache 请求访问网络 SMB 共享。
让我们进入第 1 点),“验证“。正如您在“常见的 mount.cifs 选项“ 已经提到的文档的部分,您可以指定 “用户=“ 和 ”通过=“安装资源时使用的选项。
请花一些时间仔细思考此选项的目的,特别是与其他两个附加选项相关的目的”uid=“ 和 ”gid=“:前两个(用户=和通过=)用于远程身份验证,因此应该匹配一些定义的用户名在服务器上. 最后几个(uid= 和 gid=)用于在客户端上告诉本地操作系统哪些用户和哪些组将“拥有”这些文件(一旦挂载到本地文件系统),以及何时这些文件可供潜在的用户访问。全部本地定义的用户(显然,与服务器完全不同的一组用户 —— 至少在“常见”场景中)。这听起来可能有点棘手,但……一旦你考虑它,很快就会清楚 :-)
至于您的具体情况,我猜您想指定与本地“httpd”用户匹配的“uid=”和“gid=”,以便 Apache 被授予对远程资源的访问权限。
我不会深入讨论身份验证问题或如何在启动时自动安装 SMB 共享的正确配置,因为它们超出了 OP 的范围,所以请自行处理。不过,我还是敦促你小心行事,避免对网络服务器授予一般写入权限更一般地,在向映射到 Internet/公共服务(如 Web 服务器)的 uid 授予对本地/网络资源的访问权限时要格外小心。尽量避免此类访问,如果绝对需要,请授予其绝对最小的权限集(我建议:从只读挂载,或者以读写方式挂载到只读网络共享,如果还不够的话……稍后尝试扩展它……)