在 Ubuntu 开启及关闭虚拟主机, 会用 a2ensite 及 a2dissite 指令, 这个方法在管理多个 Virtual Host 时方便很多, 以下是在 RHEL 7 及 Centos 7 下, 设定类似 Ubuntu 管理 Virtual Host 的方法。
Ubuntu 在 /etc/httpd 目录下建立两个目录, 分别是 sites-available 及 sites-enabled, 将每个 Virtual Host 的设定放在 sites-available 目录, 当开启 vhosts 时, 将 Virtual Host 的设定档从 sites-available 搬到 sites-enabled 目录, 而 Apache 会读取 sites-enabled 的 Virtual Host 设定.
关于安装 Apache 的步骤, 可参考以下文章:
RHEL 及 CentOS 7 安装 Apache, MariaDB, PHP(LAMP)
首先建立储存 Virtual Host 的目录:
-
# cd /etc/httpd
# mkdir sites-available sites-enabled
然后开启 httpd.conf 设定档, 设定 Apache 自动读取 /etc/httpd/sites-enabled/ 目录下所有 .conf 结尾的档案。
- # vi /etc/httpd/conf/httpd.conf
在 httpd.conf 最后加入以下一行:
现在建立 Virtual Host 的档案, 建立了一个档案后, 以下会以 opencli.com 为例子, 并假设 DocumentRoot 放在 /var/www/opencli.com, 建立 vhosts 的设定档:
- # vi /etc/httpd/sites-available/opencli.com.conf
加入以下内容:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<virtualhost *:80=""> ServerName www.opencli.com ServerAlias opencli.com DocumentRoot "/var/www/opencli.com" <directory "="" var="" www="" opencli.com"=""> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny Allow from all </directory> ErrorLog /var/log/httpd/opencli.com-error.log CustomLog /var/log/httpd/opencli.com-access.log combined </virtualhost> |
建立 DocumentRoot 目录, 用作储存网页:
- # mkdir -p /var/www/opencli.com
现在建立 a2ensite 及 a2dissite 的 Shell Script, 以上名称可以自订, 方便自己记忆便好了:
建立 a2ensite:
- # vi /usr/local/bin/a2ensite
加入以下内容:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#!/bin/bash if test -d /etc/httpd/sites-available && test -d /etc/httpd/sites-enabled ; then echo "-----------------------------------------------" else mkdir /etc/httpd/sites-available mkdir /etc/httpd/sites-enabled fi avail=/etc/httpd/sites-available/$1.conf enabled=/etc/httpd/sites-enabled/ site=`ls /etc/httpd/sites-available/` if [ "$#" != "1" ]; then echo "Use script: a2ensite virtual_site" echo -e "\nAvailable virtual hosts:\n$site" exit 0 else if test -e $avail; then sudo ln -s $avail $enabled else echo -e "$avail virtual host does not exist! Please create one!\n$site" exit 0 fi if test -e $enabled/$1.conf; then echo "Success!! Now restart Apache server: sudo systemctl restart httpd" else echo -e "Virtual host $avail does not exist!\nPlease see available virtual hosts:\n$site" exit 0 fi fi |
建立 a2dissite:
- # vi /usr/local/bin/a2dissite
加入以下内容:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#!/bin/bash avail=/etc/httpd/sites-enabled/$1.conf enabled=/etc/httpd/sites-enabled site=`ls /etc/httpd/sites-enabled/` if [ "$#" != "1" ]; then echo "Use script: a2dissite virtual_site" echo -e "\nAvailable virtual hosts: \n$site" exit 0 else if test -e $avail; then sudo rm $avail else echo -e "$avail virtual host does not exist! Exiting!" exit 0 fi if test -e $enabled/$1.conf; then echo "Error!! Could not remove $avail virtual host!" else echo -e "Success! $avail has been removed!\nPlease restart Apache: sudo systemctl restart httpd" exit 0 fi fi |
建立 a2ensite 及 a2dissite 后, 用 chmod 给以上 Shell Script 可执行权限:
- # chmod +x /usr/local/bin/a2*
现在可以用以下指令开启及关闭 vhosts:
-
# a2ensite vhost_name
# a2disite vhost_name
以上面的 opencli.com 作为例子, 执行以下指令开启及重新启动 Apache:
-
# a2ensite opencli.com
# systemctl restart httpd
要关闭则使用以下指令:
-
# a2dissite opencli.com
# systemctl restart httpd
要建立其他 vhosts, 只要按上面 opencli.con.conf 的内容作为范本, 建立其他 vhosts 档案即可。