引言
Apache HTTP Server(通常简称Apache)是全球最广泛使用的Web服务器之一。它不仅支持跨平台运行,还因其强大的安全性和灵活性而备受推崇。本文将深入探讨如何在Kylin麒麟操作系统中部署和使用Apache服务来创建静态网站。
一、什么是Apache?
Apache是开源软件基金会的一个项目,其名字来源于美国印第安人的土著语,象征着“拥有高超的作战策略和无穷的耐性”。作为一个成熟的Web服务器解决方案,Apache能够处理HTTP请求并为客户端提供网页内容。此外,它还支持多种认证方式、SSL加密连接以及丰富的模块扩展,使其成为一个功能全面的服务平台。
二、配置文件解析
Apache的主要配置文件位于/etc/httpd/conf/httpd.conf。这个文件包含了全局设置,定义了Apache的行为。除了主配置文件外,Apache还可能引用其他配置文件或目录下的配置片段,如/etc/httpd/conf.d/和/etc/httpd/conf.modules.d/。
配置文件:
ServerRoot "/etc/httpd" Listen 80 Include conf.modules.d/*.conf User apache Group apache ServerAdmin root@localhost <Directory />AllowOverride noneRequire all denied </Directory> DocumentRoot "/var/www/html" <Directory "/var/wwwroot">AllowOverride NoneRequire all granted </Directory> <Directory "/var/wwwroot">Options Indexes FollowSymLinksAllowOverride NoneRequire all granted </Directory> <IfModule dir_module>DirectoryIndex index.html </IfModule> <Files ".ht*">Require all denied </Files> ErrorLog "logs/error_log" LogLevel warn <IfModule log_config_module>LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %b" common<IfModule logio_module>LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio</IfModule>CustomLog "logs/access_log" combined </IfModule> <IfModule alias_module>ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" </IfModule> <Directory "/var/www/cgi-bin">AllowOverride NoneOptions NoneRequire all granted </Directory> <IfModule mime_module>TypesConfig /etc/mime.typesAddType application/x-compress .ZAddType application/x-gzip .gz .tgzAddType text/html .shtmlAddOutputFilter INCLUDES .shtml </IfModule> AddDefaultCharset UTF-8 <IfModule mime_magic_module>MIMEMagicFile conf/magic </IfModule> EnableSendfile on IncludeOptional conf.d/*.conf ServerTokens Prod ServerSignature off TraceEnable off
以下是一些关键配置项的解释:
-
ServerRoot:指定Apache服务器的根目录,默认是/etc/httpd。
-
Listen:设定Apache监听的IP地址和端口,例如Listen 80表示监听所有接口的80端口。
-
DocumentRoot:指明Web文档的根目录,即用户通过HTTP访问时所能看到的最高级目录,通常是/var/www/html。
-
指令块:用于定义特定目录的行为,可以用来控制访问权限等。
-
DirectoryIndex:定义当用户访问一个目录时默认加载的文件名,比如index.html。
-
Include:引入其他配置文件或目录中的配置片段,常用于组织和管理复杂的配置。
-
LoadModule:加载各种模块,以增加Apache的功能,例如PHP支持需要加载php_module。
-
User 和 Group:设置Apache进程运行时的用户和组身份,这对安全性至关重要。
-
ErrorLog 和 CustomLog:分别指定错误日志和访问日志的位置。
三、安装Apache服务
为了安装Apache服务程序,在Kylin麒麟操作系统中,您可以使用dnf命令:
[root@localhost ~]# dnf install httpd
这将安装Apache及其依赖项,并准备好开始配置您的Web服务器。
四、创建简单的网站
假设您想要创建一个简单的网站,可以在服务器上的网站数据目录中新建一个子目录,并在这个子目录中创建一个包含“Successful”单词的首页文件。
[root@localhost ~]# mkdir /var/www/html/server [root@localhost ~]# echo "Successful" > /var/www/html/server/index.html
然后,在浏览器中访问127.0.0.1此页面,您应该会看到文本“Successful”。
五、配置个人用户主页功能
如果您想为每位用户建立一个独立的网站,可以通过启用httpd服务程序提供的个人用户主页功能来实现。该功能允许系统内所有的用户在自己的家目录中管理个人的网站,而且访问起来也非常容易。
第一步:启用个人用户主页功能
编辑/etc/httpd/conf.d/userdir.conf文件,取消注释或添加以下行以启用用户目录功能:
<IfModule mod_userdir.c>UserDir public_html </IfModule>
并且确保在/etc/httpd/conf/httpd.conf或其他适当位置启用了mod_userdir模块:
LoadModule userdir_module modules/mod_userdir.so
第二步:设置用户主页
在用户家目录中建立用于保存网站数据的目录及首页面文件。另外,还需要把家目录的权限修改为755,保证其他人也有权限读取里面的内容。
[root@localhost home]# su - postgres [postgres@localhost ~]$ mkdir public_html [postgres@localhost ~]$ echo "This is postgres's website" > public_html/index.html [postgres@localhost ~]$ chmod -R 755 /home/postgres
第三步:重启服务并访问
重新启动Apache服务程序,在浏览器的地址栏中输入网址,其格式为“网址/~用户名”(其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格)。例如127.0.0.1/~postgres/。
[postgres@localhost ~]$ exit logout [root@localhost ~]# systemctl restart httpd
六、虚拟主机配置
Apache允许基于不同的资源来创建虚拟主机网站,包括但不限于IP地址、域名和端口号。这里我们将着重讨论基于域名配置虚拟主机的方法。
6.1 基于主机域名配置虚拟主机
当服务器无法为每个网站都分配一个独立IP地址时,可以让Apache自动识别用户请求的域名,从而根据不同的域名请求传输不同的内容。为了实现这一点,首先需要手动定义IP地址与域名之间的对应关系。这可以通过编辑/etc/hosts文件完成,以强制解析特定域名为指定IP地址。
[root@localhost ~]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 127.0.0.1 www.postgres.com www.oracle.com www.mysql.com
接下来,分别创建用于保存不同网站数据的目录,并向其中写入明确区分不同网站内容的首页文件。
[root@localhost ~]# mkdir -p /home/wwwroot/postgres [root@localhost ~]# mkdir -p /home/wwwroot/oracle [root@localhost ~]# mkdir -p /home/wwwroot/mysql [root@localhost ~]# echo "www.postgres.com" > /home/wwwroot/postgres/index.html [root@localhost ~]# echo "www.oracle.com" > /home/wwwroot/oracle/index.html [root@localhost ~]# echo "www.mysql.com" > /home/wwwroot/mysql/index.html
最后,在Apache的配置文件中追加写入基于主机名的虚拟主机网站参数,并重启Apache服务使配置生效。
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
# 在适当位置添加如下内容: <VirtualHost 192.168.2.10:80>ServerName www.postgres.comDocumentRoot "/home/wwwroot/postgres" </VirtualHost> <VirtualHost 192.168.2.11:80>ServerName www.oracle.comDocumentRoot "/home/wwwroot/oracle" </VirtualHost> <VirtualHost 192.168.2.12:80>ServerName www.mysql.comDocumentRoot "/home/wwwroot/mysql" </VirtualHost> [root@localhost ~]# systemctl restart httpd
现在,当用户访问www.postgres.com、www.oracle.com或www.mysql.com时,他们将被导向到相应的网站内容。
七、访问控制
Apache提供了灵活的访问控制机制,可以根据源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问限制。下面是一个例子,展示了如何只允许使用Firefox浏览器的主机访问特定的目录:
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf <Directory "/var/www/html/server">SetEnvIf User-Agent "Firefox" ff=1Order allow,denyAllow from env=ff </Directory> [root@localhost ~]# systemctl restart httpd
这段规则意味着只有使用Firefox浏览器的请求才能成功访问位于/var/www/html/server下的资源;其他请求则会被拒绝。
八、添加密码保护
有时,网站的拥有者并不希望直接将网页内容显示出来,而是只想让通过身份验证的用户看到里面的内容。这时可以为网站添加密码保护功能。
第一步:生成密码数据库
使用htpasswd命令生成密码数据库。-c参数表示第一次生成;后面再分别添加密码数据库的存放文件,以及验证要用到的用户名称(该用户不必是系统中已有的本地账户)。
[root@localhost ~]# htpasswd -c /etc/httpd/passwd postgres New password: 输入用于网页验证的密码 Re-type new password: 再次输入确认密码 Adding password for user postgres
第二步:编辑配置文件
继续编辑个人用户主页功能的配置文件。把相关部分的参数信息修改成下列内容,随后保存并退出配置文件,重启Apache服务程序即可生效。
[root@localhost ~]# vim /etc/httpd/conf.d/userdir.conf <Directory "/home/*/public_html">AllowOverride allAuthUserFile "/etc/httpd/passwd"AuthName "My privately website"AuthType BasicRequire user postgres </Directory> [root@localhost ~]# systemctl restart httpd
此后,当用户再想访问某个用户的个人网站时,就必须输入账户和密码才能正常访问了。
九、结论
通过以上步骤,我们可以看到Apache的强大之处在于它的灵活性和可扩展性。无论是简单静态网站还是复杂的动态应用,Apache都能够提供稳定可靠的支持。