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

Apache Httpd 2.2 配置全解析(CentOS6)

132次阅读
没有评论

共计 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、短信等云产品特惠热卖中