WWW服务器搭建(2)——Apache服务器配置与管理

一、Apache简介

1.1 关于Apache

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的Web服务器,可以在大多数计算机操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。

1.2 Apache 的特点
  • 具有开放的源代码。

  • 跨平台应用。Apache 服务器可以运行在绝大多数软硬件平台上,几乎所有 UNIX 操作系统都可以运行,同时也可以在 Windows 系统平台上良好的运行。

  • 支持各种 Web 编程语言。

  • 模块化设计。Apache 不是将所有的功能集中在固定的服务程序内部,而是尽可能地通过标准的模块实现特有的功能,因此 Apache 服务器具有良好的扩展性。

  • 运行稳定。Apache 服务器可以用于构建具有大负载访问量的 Web 站点。

  • 良好的安全性。开源软件共同具有的特性。

二、Apache服务器的安装

本文基于CentOS 7.5系统安装并配置Apache服务器,Apache的版本是2.4.6。

[root@apache ~]# uname -r
3.10.0-862.el7.x86_64
[root@apache ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
2.1 安装Apache

Apache的主程序名称是httpd,服务器配置好YUM源后,使用如下命令安装httpd,并可同时安装其依赖包。依赖包主要包括apr、apr-utils和httpd-tools。

[root@apache ~]# yum install httpd -y
2.2 启动Apache

httpd安装后,系统会生成一个名为httpd.service的服务,启动此服务便可以启动Apache。

[root@apache ~]# systemctl list-unit-files --type=service | grep httpd
httpd.service                                 disabled
[root@apache ~]# systemctl start httpd.service
[root@apache ~]# systemctl enable httpd.service

Apache服务器的守护进程为httpd,默认在TCP 80端口侦听用户请求。

[root@apache ~]# netstat -nptl | grep 80
tcp6     0      0 :::80           :::*            LISTEN      70787/httpd

在浏览器中输入服务器的http://IP地址可以浏览Apache的默认网站。

2.3 Apache相关目录和文件

1、Apache主配置文件

/etc/httpd/conf/httpd.conf ,是Apache的主配置文件,几乎包含了所有的配置。有的版本将主配置文件拆分成数个小配置文件,分别管理不同的参数。后面会详细解释Apache主配文件。

2、额外配置文件目录

为了便于管理和维护,可以将一些配置参数从主配置文件分离出来,形成额外的配置文件,以.conf结尾,存放在/etc/httpd/conf.d/目录中,在主配置文件中配置IncludeOptional conf.d/*.conf,从而当重启Apache的时候,可以将它们读入主配置文件。

3、默认网站主目录

/var/www/html/这个目录就是Apache默认的存放Web页面的目录、即默认网站主目录。

4、模块文件目录

Apache采用了模块化设计,Apache 的模块分为静态模块和动态模块两种。Apache 最基本的模块是静态模块,静态模块不能够随意的添加或卸载;而动态模块则可以进行添加和删除操作,因此使 Apache 具有很大的灵活性。Apache支持的外挂模块的模块文件默认是放置在/usr/lib64/httpd/modules目录中。

使用命令httpd -M可以查看哪些是静态模块(static),哪些是动态模块(shared)。

5、日志目录

/var/log/httpd/是Apache日志文件默认的保存位置,对于流量比较大的网站来说,这个目录要格外注意,这里的数据文件可能会非常大。

6、CGI程序目录

/var/www/cgi-bin/是Apache保存可执行的CGI程序的默认位置。

三、Apache配置文件详解

3.1 主站点的基本配置
ServerRoot "/etc/httpd"
# Apache软件安装的位置。若配置文件中其他目录没有指定绝对路径,则目录是相对于该目录。 
​
Listen 80 
# 服务器监听的端口号。 
​
ServerName www.example.com:80
# 主站点名称(网站的主机名)。 
​
ServerAdmin root@localhost
# 管理员的邮件地址。 
​
DocumentRoot "/var/www/html"
# 主站点的网页存储位置。 
​
User apache
Group apache
# 运行httpd进程的用户和组(都是apache)
 
3.2 对目录的访问控制

1、语法:

<Directory></Directory>用于封装一组指令,使之仅对某个目录及其子目录生效。

<Directory “目录路径”> ... </Directory>

2、例如:

<Directory "/var/www/html">
     Options Indexes FollowSymLinks
     AllowOverride None
     Require all granted
</Directory>

3、说明:

(1)Options:配置在特定目录使用的特性,有以下8种选项

#1、All: 所有特性全部选择,除了MultiViews
#2、None: 所有特性全部不选择
#3、Indexes: 如果访问网站的目录中没有DirectoryIndex (如index.html),则返回该目录文件列表
#4、Includes: 允许服务端包含功能
#5、FollowSymLinks: 允许在目录中使用符号链接引导到其他目录
#6、SymLinksifOwnerMatch: 当符号链接和其指向的目录的所有者是同一用户时,才会使用符号链接
#7、ExecCGI: 允许使用CGI
#8、MultiViews: 允许使用内容协商的"多重视图",如果请求的路径可能对应多种类型的文件,那么服务器将根据请求的具体情况自动选择最匹配项
# 例如在网站根目录下有demo.jpg和demo.html的两个文件,此访问http://localhost/demo,如果根目录中没有demo子目录,那么服务器将会继续查找形如demo.*的文件,然后根据具体情况返回最匹配的demo.jpg或者demo.html

(2)AllowOverride:用于配置是否允许使用.htaccess文件中的配置覆盖当前配置生效,有6种选项

#1、All: 允许使用
#2、None: 不允许使用,.htaccess文件配置将被忽略
#3、FileInfo: 允许使用文件控制类型的配置指令,包括:AddEncoding, AddLanguage, AddType等
#4、AuthConfig: 允许使用认证类型的配置指令,包括:AuthDBMGroupFile, AuthDBMUserFile等
#5、Indexes: 允许使用控制目录索引的配置指令,包括:AddDescription, AddIcon等
#6、Limit: 允许使用权限控制类型的配置指令,包括:Allow, Deny和Order

(3)Require:用于配置访问权限,常见的配置如下:

# Require all denied: 拒绝所有访问请求,也是Require缺省配置
# Require all granted: 允许所有访问请求
# Require ip 192.168 10.10.10: 允许特定IP段的访问请求
# Require not ip 192.168 10.10.10: 不允许特定IP段的访问请求
# Require命令缺省标签为 <RequireAny>...</RequireAny>,表示任何一条规则满足即可访问
# 如果要表示所有规则同时满足时才可访问,需要使用标签 <RequireAll>...</RequireAll>
3.3 文件访问控制

1、语法

提供基于文件名的访问控制,文件名也可以是一个包含通配符的字符串,其中"?"匹配任何单个字符,"*"匹配任何字符串序列。在"~"字符之后可以使用正则表达式。

<Files "文件名"> ... </Files>

2、例如

<Files ".ht*">
    Require all denied #禁止访问.ht开头的文件
</Files>
3.4 模块配置

模块文件位于/usr/lib64/httpd/modules目录中,这些模块是否被加载,可以参考配置/etc/httpd/conf.modules.d目录中的配置文件。

在主配置文件中,使用<IfModule 模块名></IfModule >用于封装一组指令,使如果加载了对应的模块,封装的指令才有效。

3.5 默认访问页面

例如:

<IfModule dir_module>
    DirectoryIndex index.html
    #默认首页文件
</IfModule>
3.6 日志配置

1、错误日志

ErrorLog "logs/error_log"
#日志的保存位置/etc/httpd/logs/error_log
LogLevel warn
#指定错误日志的级别,对应级别及该级别以上的错误日志信息才会记录到错误日志中。

Apache的错误日志级别用于控制Apache服务器记录错误信息的严重程度。Apache的错误日志级别包括:

  • emerg:紧急(会导致服务器不能正常工作)

  • alert:需要立即修复的问题

  • crit:严重错误

  • error:错误

  • warn:警告

  • notice:需要注意的信息

  • info:一般信息

  • debug:调试信息(可能包含大量信息)

2、日志格式

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
​
    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
​
    #定义访问日志的保存位置和日志别名nickname
    CustomLog "logs/access_log" combined
</IfModule>

格式中的各个参数,如:

  • %h:客户端的ip地址或主机名

  • %l:这是由客户端 identd 判断的RFC 1413身份,输出中的符号 "-" 表示此处信息无效。

  • %u:由HTTP认证系统得到的访问该网页的客户名。有认证时才有效,输出中的符号 "-" 表示此处信息无效。

  • %t:服务器完成对请求的处理时的时间。

  • %r:引号中是客户发出的包含了许多有用信息的请求内容。

  • %>s:这个是服务器返回给客户端的状态码。

  • %b:最后这项是返回给客户端的不包括响应头的字节数。

  • %{Referer}i:此项指明了该请求是从被哪个网页提交过来的。

  • %{User-Agent}i:此项是客户浏览器提供的浏览器识别信息。

3、例如

192.168.200.1 - - [29/Apr/2024:21:24:09 +0800] "GET /noindex/css/bootstrap.min.css HTTP/1.1" 200 19341 "http://192.168.200.100/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
3.7 网页重定向和虚拟目录配置
<IfModule alias_module>
    # Redirect: 用于将访问的文件重定向到新的目录
    # Example:
    # Redirect permanent /foo http://www.example.com/bar
    Redirect    /mastc          https://www.mastc.edu.cn/
    
    # Alias: 将网站路径映射到文件系统路径,用于访问不在网站根目录下的内容,即虚拟目录
    # Example:
    # Alias /webpath /full/filesystem/path
    Alias /images /var/images
    
    # ScriptAlias: 脚本映射,与Alias类似,只是目标文档被视为脚本
    # 并在请求时由服务器运行,而不是作为发送到客户端的文档
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
例1:网页跳转
Redirect    /mastc      https://www.mastc.edu.cn/

例2:虚拟目录

  • 准备目录和文件

[root@centos-teach ~]# mkdir /var/images
[root@centos-teach ~]# cp /usr/share/backgrounds/*.jpg /var/images/
  • 配置主配置文件

Alias /images /var/images
<Directory "/var/images">
  AllowOverride None
  Options  Indexes FollowSymLinks
  Require all granted
</Directory>
3.8 其他配置
# 响应内容的默认编码格式
# 通常,文件的字符编码和客户端浏览器编码相同时,页面才会正常显示,否则会乱码。
# 可以通过meta标签或header()函数可以设置客户端浏览器的编码。
# 优先级:header() >> AddDefaultCharset >> meta
AddDefaultCharset UTF-8
# 导入额外配置文件
IncludeOptional conf.d/*.conf
# 导入功能模块配置文件
Include conf.modules.d/*.conf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hongmayi3753

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值