在 RHEL/CentOS 7.0 中使用启用/禁用 Vhosts 选项创建 Apache 虚拟主机
虚拟主机允许 Apache Weberver 根据 IP 地址、主机名或使用的端口号提供不同的内容。本指南将使用类似Debian 的方法在 Red Hat Enterprise Linux/CentOS 7.0 上启用和管理虚拟主机,方法是在/etc/httpd/路径上创建两个目录,这两个目录将保存所有启用和禁用的网站文件配置 - sites-available和sites-enabled,以及两种充当命令的脚本,一个用于启用,另一个用于禁用指定的虚拟主机 - a2ensite和a2dissite。这种方法有一些优点,因为你不必摆弄 httpd 配置文件,并且每个虚拟主机都有自己的配置文件,可以在一个位置找到 - 启用的主机只是符号链接 - 这使得启用、禁用、创建或删除它们的过程非常容易管理。
要求
在 RHEL/CentOS 7 中创建和管理 Apache 虚拟主机
1.首先,进入/etc/httpd/路径,创建 sites-available 和 sites-enabled 目录,然后编辑 Apache httpd.conf文件以应用新启用的网站位置。
# cd /etc/httpd/ # mkdir sites-available sites-enabled # nano conf/httpd.conf
2.在httpd.conf文件的底部添加以下指令行,这将使 Apache 读取并解析位于/etc/httpd/sites-enabled/上以.conf扩展名结尾的所有文件。
IncludeOptional sites-enabled/*.conf
3.下一步,在站点可用位置创建一个新的虚拟主机,使用描述性名称 - 在本例中我使用了rheltest.lan.conf - 并使用以下文件作为模板。
# nano /etc/httpd/sites-available/rheltest.lan.conf
使用此配置作为指南。
<VirtualHost *:80> ServerName rheltest.lan DocumentRoot "/var/www/rheltest.lan" <Directory "/var/www/rheltest.lan"> Options Indexes FollowSymLinks MultiViews # AllowOverride controls what directives may be placed in .htaccess files. AllowOverride All # Controls who can get stuff from this server file Order allow,deny Allow from all </Directory> <IfModule mpm_peruser_module> ServerEnvironment apache apache </IfModule> ErrorLog /var/log/httpd/rheltest.lan-error.log CustomLog /var/log/httpd/rheltest.lan-access.log combined </VirtualHost>
4.如果您将虚拟主机上的DocumentRoot位置从默认的/var/www/html更改为其他路径,请确保您也创建了此路径。
# mkdir -p /var/www/rheltest.lan
注意:还要确保 ServerName 主机是有效的 DNS 记录或已添加到您计划访问网站的本地计算机 hosts 文件中。
5.现在是时候在可执行系统路径上创建a2ensite和a2dissite bash 脚本了 - 在本例中是/usr/local/bin/ -但您可以使用$PATH
系统变量输出
的任何可执行路径。
创建 a2ensite 脚本
使用您选择的编辑器创建以下文件。
# nano /usr/local/bin/a2ensite
将以下脚本添加到其中。
#!/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 脚本
使用您选择的编辑器创建以下文件。
# nano /usr/local/bin/a2dissite
将以下整个脚本添加到文件中。
#!/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
6.两个脚本文件创建完成后,确保它们是可执行的,并通过附加 vhost 名称作为命令参数来开始使用它们来启用或禁用虚拟主机。
# chmod +x /usr/local/bin/a2* # a2ensite vhost_name # a2disite vhost_name
7.为了测试它,启用之前创建的虚拟主机,重新启动Apache服务并将浏览器直接转到新的虚拟主机 - 在本例中为http://rheltest.lan。
# a2ensite rheltest.lan # systemctl restart httpd
就是这样!现在您可以使用a2eniste和a2dissite bash 脚本作为系统命令来管理 RHEL/CentOS 7.0 上的 Apache Vhosts 文件。