你如何制作一个指向SMBnetworking共享的apache虚拟主机?

我有一个SMB文件共享在我的本地networking上。 我将所有的网站存储在这台服务器上。 我有另一台运行CentOS的服务器托pipe一个Apache Web服务器。 你将如何创build一个指向SMB分享的虚拟主机

SMB服务器的path是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. 身份validation :假设您的Windows服务器正在为“ fms studios ”networking共享服务,那么这样一个共享的机会很高,因此远程访问需要一个用户名/密码对;

  2. 访问方法 :您的Apache需要知道其虚拟主机的文档根位于何处。 根据你的问题,你“猜测”一个“smb://”前缀会让Apache知道/处理远程访问SMB共享。

让我们开始处理第2点。从官方文档中可以看到,“ DocumentRoot ”指令需要一个目录path。 这通常是在本地机器的文件系统中定义的“本地”path。

这对您来说不是问题,因为完全可以在我们的本地文件系统中“安装”远程SMBnetworking共享。 在你喜欢的search引擎上search“linux smb mount”或者从这里开始调查。 这将让你的SMB共享在像/mnt/server_win2012/fms%20studios这样的path下被访问。 您可以将其视为与Windows世界相同的方式 – 使用映射到远程path的驱动器盘符访问networking共享,而不是访问UNCpath(…以\\<something>开头)直接从资源pipe理器

所以,现在您可以让Apache请求访问networkingSMB共享。

让我们来点1),“ authentication ”。 正如您在已经提到的文档的“ Common mount.cifs选项 ”一节中所看到的那样,您可以在安装资源时指定“ user = ”和“ pass = ”选项。

请仔细考虑一下这个选项的目的,特别是关于其他两个附加选项“ uid = ”和“ gid = ”:前两个( user =pass = )用于远程authentication,应该匹配在服务器上定义的一些用户名。 在客户端使用最后一对(uid =和gid =)来告诉本地操作系统将是用户和将“拥有”文件的组,一旦挂载在本地文件系统上,并且因此当它们将可能被本地定义的所有用户访问(显然,与服务器完全不同的一组 – 至less在“常见”场景中)。 这听起来有点棘手,但一旦你想到它,很快就会明白:-)

至于你的具体情况,我想你想指定一个“uid =”和“gid =”匹配你本地的“httpd”用户,这样Apache将被授予访问远程资源的权限。

我没有进一步讨论身份validation问题,或者在启动时自动挂载SMB共享的正确configuration,因为它们超出了OP的范围,所以请自行采取行动。 不过,我恳请您谨慎行事,避免对networking服务器的一般写入权限 。 更一般地说,在授予对映射到互联网/公共服务(如web服务器)的uid的本地/networking资源访问权限时,要非常小心。 尽量避免这样的访问,如果绝对需要的话,授予它绝对minimimun权限集(我build议:开始一个只读的挂载,或读写挂载到一个只读的networking共享,如果它是不够的。稍后尝试延长…)