如何在Ubuntu 20.04配置Apache虚拟主机
虚拟主机是一种Apache配置指令,可让您在单个服务器上运行多个网站。本文介绍了如何在Ubuntu 20.04设置Apache虚拟主机
Apache虚拟主机使您可以在一台服务器上运行多个网站。对于每个网站,您可以设置站点文档根目录,包含网站文件的目录,创建单独的安全策略,使用不同的SSL证书等等。
本教程介绍如何在Ubuntu 20.04配置Apache虚拟主机。包括创建Apache的文档根目录,创建Apache虚拟主机。
说明Apache虚拟主机常见指令如DocumentRoot,ServerName,Directory。自定义Apache日志格式与存储目录。使用apachectl
命令验证配置文件语法。
在继续学习本教程之前,请确保您满足这些要求,一个域名指向您的服务器IP。已经在Ubuntu 20.04安装Apache。您以root或具有sudo权限的用户登录。
DocumentRoot
文档根目录是一个目录,用于存储指向该域名的网站文件,以响应请求。你可以将文档根目录设置为所需的任何位置,
但Apache必须有读取权限,对于可执行文件,例如php。nginx必须对其有可执行权限,否则Apache返回500内部服务器的错误。
在此示例中我们将使用目录/var/www/example.com/public_html
。作为Apache虚拟主机的的文档根目录。
你可以使用命令sudo mkdir -p /var/www/example.com/public_html
创建目录。我们还将在需要文档根目录中创建一个index.html
文件。
echo "hello myfreax.com" | sudo tee /var/www/example.com/public_html/index.html
命令将会使用tee命令创建index.html
文件。当您在浏览器中访问该域时会显示该文件。
由于上述命令是作为sudo用户执行的,因此新创建的文件和目录归root所有。为了避免权限问题。
请将文档根目录的所有权以及该目录中所有文件的所有权更改为apache用户所有。运行chown命令。
sudo mkdir -p /var/www/example.com/public_html
echo "hello myfreax.com" | sudo tee /var/www/example.com/public_html/index.html
sudo chown -R www-data: /var/www/example.com
创建虚拟主机
有几种方法可以设置虚拟主机。通常,您应该选择第二种方法,因为这种方法更易于维护。
第一种是将所有虚拟主机指令添加到一个文件中,第二种是为每个虚拟主机指令创建一个新的配置文件。
默认情况下,Apache会加载/etc/apache2/sites-enabled/
目录中所有以.conf
结尾的配置文件。
要为指定的网站创建Apache虚拟主机,你可以在/etc/apache2/sites-enabled/
目录添加以.conf
结尾的文件。
例如我们将为example.com
创建虚拟主机配置文件,请使用你喜欢的编辑器创建虚拟主机配置/etc/apache2/sites-enabled/example.com.conf
。
在本教程我们将继续使用vim编辑器创建文件/etc/apache2/sites-enabled/example.com.conf
。
你可以将配置文件命名为任意名称,但是通常最好使用域名,因此我们使用domain1.com.conf
作为配置文件的名称。
sudo vim /etc/apache2/sites-enabled/example.com.conf
复制并粘帖以下内容到虚拟主机配置文件中:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin webmaster@example.com
DocumentRoot /var/www/example.com/public_html
<Directory /var/www/example.com/public_html>
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/domain1.com-error.log
CustomLog ${APACHE_LOG_DIR}/domain1.com-access.log combined
</VirtualHost>
ServerName
指令指定是Apache虚拟主机所使用的域名。ServerAlias
指令允许你为Apache虚拟主机指定多个域名或者子域。例如www
子域。
DocumentRoot
指令设置Apache虚拟主机文档根目录,当你在浏览器打开你的域名时,将此目录检索文件。
Options
指令控制Apache虚拟主机每个目录的能力,例如目录是否可索引。是否跟随软连接,包含其它Apache模块,是否允许执行CGI脚本等。
-Indexes
表示指定是否允许列出目录,前面是-
表示不允许,如果你需要列出目录,可以换成加号+
。
FollowSymLinks
此选项告诉Web服务器遵循符号链接。AllowOverride
指定.htaccess
文件中声明的指令可以覆盖配置指令。
最后两行指定日志文件的存储位置,这里分别定义错误日志文件和自定义文件的位置。
ErrorLog
错误日志文件保存在/var/log/httpd/example.com-error.log
。CustomLog
还允许你指定日志格式,这里使用Apache预设日志格式combined
。
现在你已经了解每一个选项含义,当修改完成后,保存并退出vim编辑器。当完成对Apache配置文件修改后。
第一件事是首先测试所有Apache配置文件是否正确,不是重启Apache以验证配置是否可用。
Apache提供apachectl
命令可用于对配置文件语法的验证,可运行sudo apachectl configtest
命令测试配置文件的语法,如果语法正确将会输出Syntax OK
。
你可能还会看到的消息如下,出现这个消息的原因是,localhost.localdomain域名不可达导致的。这仅仅是一个警告,可以不用理会。
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
如果没有错误,则输出将提示Syntax OK。要激活新创建的虚拟主机,运行systemctl
命令重新启动Apache服务。
为了能够正确解释域名example.com
。因此我们还需要映射example1.com
到本地回环地址127.0.0.1
,运行命令echo "127.0.0.1 example.com" | sudo tee -a /etc/hosts
。
最后,要验证Nginx虚拟主机是否按预期工作,请在您选择的浏览器中打开http://example.com
sudo apachectl configtest
echo "127.0.0.1 example.com" | sudo tee -a /etc/hosts
sudo systemctl apache2.service
结论
您已经学习了如何创建apache虚拟主机配置以在单个Ubuntu服务器上托管多个域。重复上述步骤,为您所有的域创建其他虚拟主机。如果您遇到任何问题,请随时发表评论。