我有一台装有 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 脚本方法的一种方法:
答案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
简单的!