我正在设置一个 RHEL Web 服务器,它将托管多个域名的静态和动态内容。多个用户将通过 SSH 和 SFTP 更新文件。
每个域名的文件应该放在哪里?在我的默认系统上,只有一个/var/www/
,但没有线索知道如何定位多个域名。
查看文件系统层次结构标准(http://www.pathname.com/fhs/pub/fhs-2.3.html),看来最好的选择是:
/srv/example.com/www/
/srv/example.org/www/
有什么偏好吗?
答案1
Apache 默认设置通常是这样的/var/www/example.com/
,但您也可以遵循 FHS 指南,我认为这个指南非常好。重要的是您要保持系统之间的一致性,这就是为什么 FHS 是一个很好的参考。
无论如何,我建议将其放在不同的分区中,因为:
- 如果满了,不会影响服务器
- 您可以设置 noexec 等挂载选项以增强安全性
请记住要非常小心地处理目录权限,以避免一个站点的用户访问其他站点。
答案2
我们在结构方面有很好的经验
/srv/www/example.com/html
/srv/www/example.com/sub-d/www
/srv/www/example.com/sub-d/beta
/srv/www/example.com/sub-d/logs (if preferred)
如果服务器由一家公司使用。如果您有客户域需要服务,您可能需要考虑
/srv/www/client1/doma.in/html
/srv/www/client1/secon.nd/html
/srv/www/client2/foob.ar/html
答案3
我喜欢 /var/www/example.com 约定。
我喜欢将配置文件放在 /etc/httpd/vhosts.d/example.com.conf 中,并包含在主 apache 配置文件中。我不会让客户编辑它。这样,如果您添加新域并且配置文件测试、重新加载或重新启动检测到错误,那么退出就很容易了。
使用:/var/www/example.com/html /var/www/example.com/cgi-bin /var/www/example.com/log
我使用 posix acls 在上述目录上添加默认 acl,以便它们创建的任何文件都是使用 rwx 为其服务器用户(suexec 中使用的用户)/组创建的,这样无论他们在创建文件时是什么用户,网络服务器的用户都可以访问它们,并且 VritualHosts 用户组的成员可以访问所有文件。
/var/www/example.com/private 我使用私人作为密码和组文件的存放位置。
/var/www/example.com/conf/example.com.include.conf 如果我想允许网站所有者进行配置更改,我还会创建一个文件,例如:/var/www/example.com/conf/example.com.include.conf,该文件包含在域主配置中的 VirtualHost 中,即 /etc/httpd/vhosts.d/example.com.conf。
不过,您需要小心谨慎,因为这意味着用户可能会破坏您的整个配置,因此您需要非常小心,确保用户知道他们在做什么。当一台服务器有多个 VirtualHosts 且全部由同一客户拥有时,我倾向于这样做,因此,如果他们破坏配置,他们只会破坏自己的网站。
我还建议使用 suexec,它允许进程以 apache 以外的用户身份运行,并且还允许动态内容以 apache 用户以外的用户身份运行。
看: http://httpd.apache.org/docs/2.2/suexec.html
您可能还想查看各种 RLmit 指令,这些指令允许您在 VirtualHost 等基础上限制资源使用。请参阅:
答案4
我们使用以下布局
/var/www/domains/$DOMAIN/$HOST/{htdocs,logs}
举www.google.com
个例子
<VirtualHost *:80>
ServerName www.google.com
DocumentRoot /var/www/domains/google.com/www/htdocs
ErrorLog /var/www/domains/google.com/logs/error_log
CustomLog /var/www/domains/google.com/logs/access_log combined
</VirtualHost>