阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Apache Httpd 2.2 配置全解析(CentOS6)

433次阅读
没有评论

共计 8748 个字符,预计需要花费 22 分钟才能阅读完成。

服务器应用

通常我们所说的,服务器应用一般会有两种类型,http 服务器 应用程序服务器  , 而http 服务器 的典型代表有 Apache Http ServerNginx应用程序服务器 的典型代表则有 IIS,Tomcatjetty
很多做过 Java 开发的朋友应该都知道 Apache Tomcat。

Apache Httpd 2.2 配置全解析

目前,在计算机运维领域,有比较流行的几种架构,分别是 LAMP 和 LNMP。这里 LAMP 中的 A 指的就是 Apache Httpd Server。
CentOS 6 系统中默认安装了 Httpd2.2 版本,而 CentOS7 默认支持的则是 Httpd 2.4 版本,二者在使用上有所不同。同时,如果想要在 CentOS 6 上安装 Httpd2.4 的话,也需要花费一些功夫。
本篇文章,我们一起来了解一下,Apache Httpd 2.2 的配置,其余的内容留作以后来介绍。

CentOS 6 中 httpd 的程序环境

配置文件

/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf

检查修改后的配置文件中是否存在语法错误

httpd –t
service httpd configtest

httpd 的服务脚本

/etc/rc.d/init.d/httpd

httpd 的服务脚本的配置文件

/etc/sysconfig/httpd

服务控制和启动

chkconfig httpd on|off
service {start|stop|restart|status|configtest|reload} httpd

站点网页文档根目录

/var/www/html

模块文件路径

/etc/httpd/modules
/usr/lib64/httpd/modules

主程序文件

/usr/sbin/httpd 
/usr/sbin/httpd.worker 
/usr/sbin/httpd.event

主进程文件

/etc/httpd/run/httpd.pid

日志文件目录

/var/log/httpd
access_log: 访问日志
error_log:错误日志

帮助文档包

httpd-manual

httpd 配置文件的组成

# 执行下面的这条命令就可以看到,配置文件一共由下面三部分组成。[root@centos6 ~]$grep "Section" /etc/httpd/conf/httpd.conf 
### Section 1: Global Environment
### Section 2: 'Main' server configuration
### Section 3: Virtual Hosts

配置格式

# 指令		值
directive value
directive: 指令,不区分字符大小写
value: 值为路径时,是否区分大小写,取决于文件系统

上面所述的所有的内容,都可以执行 rpm -ql httpd 中查看到。

了解了上面的基本信息之后,我们来启动一下 httpd 服务。

[root@centos6 ~]$service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for centos6.pojun.tech
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                           [OK]

从上面的提示信息中我们可以看出,这里有两个小问题。下面我们解决一下,这两个小问题。从问题描述中我们可以看出,HTTPD 服务不能明确服务器主机的名字,最好使用 127.0.0.1 来指定一下。
我们修改一下 /etc/httpd/conf/httpd.conf 文件。

Apache Httpd 2.2 配置全解析(CentOS6)

这样的话,再重启的时候,就不会有问题提示了。

httpd 2.2 的常见配置

这里所说的配置信息都位于/etc/httpd/conf/httpd.conf

1、显示服务器的版本信息

显示服务器的版本信息的意思是说,我们在日常工作中,可能会通过一些手段,获取某些网段的服务器信息,如果我们的 HTTP 服务器的信息对于一个陌生的用户完全暴露,将会大大导致服务器的安全风险。
下图是我们通过工具获取到 Microsoft 的服务器信息(吐槽下,微软自己竟然还用别人的服务器,大家风范哪里去了(●’’●))。

Apache Httpd 2.2 配置全解析(CentOS6)

下面是我本机的 Http 2.2 服务器的信息

[root@centos6 ~]$curl -I 172.18.2.66
HTTP/1.1 200 OK
Date: Tue, 26 Sep 2017 09:22:39 GMT
Server: Apache/2.2.15 (CentOS)	 
Last-Modified: Mon, 25 Sep 2017 07:28:24 GMT
ETag: "320951-0-559fe80fa6ca6"Accept-Ranges: bytes
Connection: close
Content-Type: text/html; charset=UTF-8

这里我们能够看到,不仅将服务器的版本暴露了出来,连操作系统的信息也显示了出来。下面我们介绍一下 Httpd 服务器显示信息的设置。使用ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full 配置。

# 只显示产品名称
ServerTokens Prod[uctOnly]:Server: Apache

# 显示大版本号
ServerTokens Major: Server: Apache/2

# 显示小版本号 
ServerTokens Minor: Server: Apache/2.2 

# 显示精确的版本号
ServerTokens Min[imal]: Server: Apache/2.2.15

# 显示系统
ServerTokens OS: Server: Apache/2.2.15 (CentOS)

#全部都显示 
ServerTokens Full (or not specified): Server: Apache/2.0.41(Unix) PHP/4.2.2 MyMod/1.2

Apache Httpd 2.2 配置全解析(CentOS6)

通常来说,推荐使用 prod 方式,暴露的信息越少,相对的也就乐安全。

2、修改监听的 IP 和 PORT

配置的格式为 Listen [IP:]PORT

  • 省略 IP 表示为 0.0.0.0;

  • Listen 指令至少一个,可重复出现多次

  • 修改监听 socket,重启服务进程方可生效

Apache Httpd 2.2 配置全解析(CentOS6)

3、持久连接

Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接。

断开持久连接的条件:

  • 数量限制:假设设定的 100

  • 时间限制:以秒为单位,HTTPD-2.4 支持毫秒级。

副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应
解决办法:使用较短的持久连接时间。

Apache Httpd 2.2 配置全解析(CentOS6)

4、MPM(Multi-Processing Module)多路处理模块

httpd 2.2 提供了三种不同类型的多路处理模块。prefork,worker,event(实验阶段)。想要指定相应的处理模块,修改/etc/sysconfig/httpd 文件。

Apache Httpd 2.2 配置全解析(CentOS6)

每一种多路处理模块都有相应的配置,打开 /etc/httpd/conf/httpd.conf

prefork 模块的配置信息

Apache Httpd 2.2 配置全解析(CentOS6)

其中参数的含义如下所示。

  • StartServers : 服务开始时的默认进程数

  • MinSpareServers : 进程数最少数量

  • MaxSpareServers : 最大的空闲进程数

  • ServerLimit : 最大的进程数,最大 20000

  • MaxClients : 最大的并发数量

  • MaxRequestsPerChild:子进程最多能处理的请求数量。在处理 MaxRequestsPerChild 个请求之后, 子进程将会被父进程终止,这时候子进程占用的内存就会释放(为 0 时永远不释放)

worker 模块的配置信息

Apache Httpd 2.2 配置全解析(CentOS6)

其中参数的含义如下所示。

  • StartServers : 服务开始时的默认进程数

  • MaxClients : 最大的并发数量

  • MinSpareThreads: 最小的空闲线程数量,低于这个数量,系统就会立马开启新的进程

  • MaxSpareThreads: 最大的空闲线程数量,这个值可能会与 StartServers 值冲突

  • ThreadPerChild : 每个进程支持的线程数量,因为这个值会导致 StartServersMaxSpareThreads 值产生冲突。

  • MaxRequestsPerChild:子进程最多能处理的请求数量。在处理 MaxRequestsPerChild 个请求之后, 子进程将会被父进程终止,这时候子进程占用的内存就会释放(为 0 时永远不释放)

5、DSO:Dynamic Shared Object 动态模块配置

使用 httpd -M命令可以查看目前已经加载的动态模块。

Apache Httpd 2.2 配置全解析(CentOS6)

配置指定实现模块加载格式:LoadModule <mod_name> <mod_path> 模块文件路径可使用相对路径:相对于 ServerRoot(默认/etc/httpd, 在/etc/httpd/conf/httpd.conf 文件中已经指定 ServerRoot)

例如 auth_basic_module modules/mod_auth_basic.so就是指定用户在访问服务器的时候需要提供身份验证的模块。

6、定义’Main’server 的文档页面路径

所谓默认主页的意思就是说,当我们只通过域名访问的时候,系统会默认跳转到某一页面,这个页面就是默认主页,所以这里可以设置默认主页的路径。

Apache Httpd 2.2 配置全解析(CentOS6)

DocumentRoot 指向的路径为 URL 路径的起始位置

7、定义站点主页面

站点主页面,也就是我们所说的默认首页啦。

Apache Httpd 2.2 配置全解析(CentOS6)

8、站点访问控制常见机制

可基于两种机制指明对哪些资源进行何种访问控制, 访问控制机制有两种:客户端来源地址,用户账号

  • 基于文件系统路径控制

<Directory“/path">
...
</Directory>
<File“/path/file”>
...
</File>
<FileMatch "PATTERN">
...
</FileMatch>
  • 基于 URL 路径控制

<Location "">
...
</Location>
<LocationMatch "">
...
</LocationMatch>

9、<Directory>中“基于源地址”实现访问控制

  • Options:后跟 1 个或多个以空白字符分隔的选项列表。在选项前的 +,- 表示增加或删除指定选项。

    • Indexes:指明的 URL 路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户

    • FollowSymLinks:允许访问符号链接文件所指向的源文件

    • None:全部禁用

    • All:全部允许

  • AllowOverride:与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由 AccessFileName 指定)文件中,覆盖之前的配置指令,只对

    语句有效。

    • AllowOverride All:所有指令都有效

    • AllowOverride None:.htaccess 文件无效 例如 AllowOverride AuthConfig Indexes 除了 AuthConfig 和 Indexes 的其它指令都无法覆盖

  • order 和 allow、deny

    • order:定义生效次序;写在后面的表示默认法则
      Order allow,deny
      Order deny,allow
      Allow from, Deny from

Apache Httpd 2.2 配置全解析(CentOS6)

下面是一些示例

<Directory /web/docs>
Options Indexes 允许查看索引 
</Directory>

<Directory /web/docs/spec>
Options FollowSymLinks  允许访问连接
</Directory>


<files "*.txt">
order deny,allow
deny from 172.16. 100.100
allow from 172.16
</files>
<files "*.txt">
order allow,deny
deny from 172.16.100.100
allow from 172.16
</files>

10、日志设定

日志的类型有两种 访问日志 错误日志

错误日志

loglevel 可选值:debug, info, notice, warn,errorcrit, alert, emerg

Apache Httpd 2.2 配置全解析(CentOS6)

访问日志

定义日志的格式

Apache Httpd 2.2 配置全解析(CentOS6)

日志的使用

Apache Httpd 2.2 配置全解析(CentOS6)

参考帮助:

http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#logformat

  • %h 客户端 IP 地址

  • %l 远程用户, 启用 mod_ident 才有效, 通常为减号”-“

  • %u 验证(basic,digest)远程用户, 非登录访问时,为一个减号”-“

  • %t 服务器收到请求时的时间

  • %r First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本

  • %>s 响应状态码

  • %b 响应报文的大小,单位是字节;不包括响应报文 http 首部

  • %{Referer}i 请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的

  • %{User-Agent}i 请求报文中首部“User-Agent”的值;即发出请求的应用程序

11、设定默认字符集

设定服务器默认的字符集,一般使用 UTF-8,这是国际通用的字符集。

Apache Httpd 2.2 配置全解析(CentOS6)

12、定义路径别名

格式:Alias /URL/“/PATH/”

Apache Httpd 2.2 配置全解析(CentOS6)

设置了别名之后,当我们通过 url 进行访问的时候,服务器会自动的将资源路径指向别名所指的位置。
例如 http://127.0.0.1/icons/ ==> /var/www/icons/

13、基于用户的访问控制

认证质询:WWW-Authenticate:响应码为 401,拒绝客户端请求,并说明要求客户端提供账号和密码
认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的
资源认证方式两种:

  • basic(明文)

  • digest(消息摘要认证, 兼容性差)

安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因

用户的账号和密码:

  • 虚拟账号:仅用于访问某服务时用到的认证标识

  • 存储:文本文件,SQL 数据库,ldap 目录存储,nis 等

(一)基于 basic 认证配置示例

1、定义安全域 
新建一个 以.conf 结尾的配置文件放在 /etc/httpd/conf.d/ 目录下。
这个目录就是存放自定义配置文件的路径。/etc/httpd/ 就是我们前面提到的 ServerRoot

<Directory“/path">
Options None
AllowOverride None
AuthType Basic		# 验证的方式
AuthName "String"	# 验证的提示信息
AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"	#密码文件存放路径
Require user username1 username2 ...	# 输入的用户名称
</Directory>

2、提供账号和密码存储(文本文件),使用专用命令完成此类文件的创建及用户管理

# /PATH/HTTPD_PASSWD_FILE 这个路径在前面的配置中已经指定  
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
-c:自动创建文件,仅应该在文件不存在时使用
-m:md5 格式加密
-s: sha 格式加密
-D:删除指定用户

(二)基于组的认证配置

1、定义安全域

<Directory“/path">
AuthType Basic
AuthName "String“AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"
AuthGroupFile "/PATH/HTTPD_GROUP_FILE"
Require group grpname1 grpname2 ...
</Directory>

2、创建用户账号和组账号文件,组文件:每一行定义一个组

基于组的认证配置示例

<Directory "/www/htdocs/admin">
Options None
AllowOverride None
AuthType Basic
AuthName "Administator private"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
AuthGroupFile "/etc/httpd/conf.d/.htgroup"
Require group webadmins
</Directory>
vim /etc/httpd/conf.d/.htgroup
webadmins:hehe haha

14、虚拟主机

(一) 基于 ip:为每个虚拟主机准备至少一个 ip 地址

基于 IP 的控制

<VirtualHost 172.16.100.6:80>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.7:80>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.8:80>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
</VirtualHost>

(二) 基于 port:为每个虚拟主机使用至少一个独立的 port

基于端口的配置,可以针对一个主机监听不同的端口,不过一定要注意的就是,在配置文件之前一定要加上 listen 端口号

# 这两个 listen 如果不加上的话,基于端口的配置将不起作用,因为没有监听这两个端口啊。listen 808
listen 8080

<VirtualHost 172.16.100.6:80>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.6:808>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.6:8080>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
</VirtualHost>

(三) 基于 FQDN:为每个虚拟主机使用至少一个 FQDN

基于域名的虚拟主机。这里非常重要的一点就是,如果要使用这种方式,就必须要将 NameVirtualHost *:80  加上。入股不加的话,是没有什么效果的。

# 这句话一定要加上 NameVirtualHost *:80 

<VirtualHost *:80>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost>
<VirtualHost *:80>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
</VirtualHost>
<VirtualHost *:80>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
</VirtualHost>

总结一下虚拟主机的配置方法

虚拟主机的配置方法结构如下所示,建议将配置存放在独立的配置文件中

<VirtualHost IP:PORT>
ServerName FQDN
DocumentRoot“/path"
</VirtualHost>

其它可用指令:

ServerAlias:虚拟主机的别名;可多次使用
ErrorLog:错误日志
CustomLog:访问日志
<Directory "/path">
</Directory>
Alias

15、status 页面

statue 页面是编译在动态模块中,如果要使用这个功能,就要将这个动态模块加入到配置文件中。

# 如果下面这行被注释掉的了话,一定要去掉注释,# 如果没有这个模块的话,就手动添加上

LoadModule status_module modules/mod_status.so


<Location /server-status>
SetHandler server-status
Order allow,deny 
Allow from 172.16
</Location>


ExtendedStatus On 显示扩展信息

搭建成功的状态页面如下图所示

Apache Httpd 2.2 配置全解析(CentOS6)

经过上面的几项配置,我们已经大体了解了 Apache httpd 2.2 的基本设置,如果想要详细的配置的话可以参考 Apache 的官方文档,http://httpd.apache.org/docs/2.2/,若有疑问,欢迎留言。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147353.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计8748字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7964537
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示 首先来回顾一下 10...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...