按域组织 .conf apache 配置

按域组织 .conf apache 配置

我有一台装有 CentOS 的 VPS 服务器,上面有多个域名(有些是我自己的,有些不是)。我把我自己的网站和我朋友的网站都托管在上面。

我有这样的结构:

/home/myfriendsusername/public_html/
/home/myotherfriendsusername/public_html/
/var/www/mydomain.com/public_html/

因此,我所有的东西都放在我的 /var/www 中,而我的朋友在主文件夹中有自己的用户名。每个 VirtualHost 都在 httpd.conf 中,而且它变得有点大(我有 50 多个域,有时包括子域)。

为每个我托管的域在 sites-enabled 中创建一个文件是否更好,例如:

/etc/apache2/sites-enabled/myfriendsdomain.com
/etc/apache2/sites-enabled/mydomain.com

这是一个好的做法吗?或者我所做的(使用 httpd.conf)是正确的?

答案1

这里有一个非常好的链接,介绍如何操作:http://wiki.centos.org/TipsAndTricks/ApacheVhostDir

基本上,您在其中创建每个配置文件域:

/etc/httpd/conf.d/

例子:

<VirtualHost *:80>
  ServerName example.org
  ServerAlias *.example.org
  ServerAdmin [email protected]
  ErrorLog /var/log/httpd/example.err
  CustomLog /var/log/httpd/example.log combined
  DocumentRoot /var/www/example.org
  <Directory "/var/www/example.org">
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

有时可能需要禁用虚拟主机。由于 /etc/httpd/conf/httpd.conf 中的包含指定了 *.conf,因此可以通过更改配置文件名来隐藏虚拟主机。

通过在虚拟主机文件名中添加 _ 来禁用虚拟主机:

mv -v /etc/httpd/conf.d/example.conf{,_}

通过从虚拟主机文件名中删除 _ 来启用虚拟主机:

mv -v /etc/httpd/conf.d/example.conf{_,}

重新开始:

service httpd graceful

答案2

在各自独立的配置文件中管理所有虚拟主机会容易得多。以下是我在 Debian 上要做的事情:

将每个 vhost 配置放在其自己的文件中/etc/apache2/sites-available/。用于a2ensite在可用的 vhost 站点和/etc/apache2/sites-enabled目录之间创建符号链接。

然后只需添加:

Include /etc/apache2/sites-enabled/

到 httpd.conf

这样,您可以轻松地使网站离线,a2dissite vhostname例如:a2dissite mydomain.com

由于您使用的是 CentOS,因此该a2ensite脚本将不存在。以下是模拟 Debian 脚本方法的一种方法:

http://cosp.org.pk/blog/shoaibi/2009/12/11/open-source/simulating-debian-apache-configuration-management-on-centos/

答案3

默认情况下(至少在 CentOS 6.2 中),Apache 配置为自动包含位于以下目录的任何配置文件:

/etc/httpd/conf.d/

在您的 httpd.conf 中搜索以下行(如果不存在则添加):

Include conf.d/*.conf

然后只需为每个虚拟主机创建配置文件:

/etc/httpd/conf.d/google.com.conf
/etc/httpd/conf.d/serverfault.com.conf

如果您想禁用虚拟主机,只需重命名:

/etc/httpd/conf.d/serverfault.com.conf.backup

简单的!

相关内容