热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ApacheHttpd2.2配置全解析(CentOS6)

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

服务器应用

通常我们所说的,服务器应用一般会有两种类型,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文件。

ServerName配置文件

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

httpd 2.2 的常见配置

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

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

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

Curl

下面是我本机的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

ServerTokens 配置

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

2、修改监听的IP和PORT

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

  • 省略IP表示为0.0.0.0;

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

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

监听不同的端口和IP

3、持久连接

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

断开持久连接的条件:

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

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

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

持久连接

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

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

MPM

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

prefork模块的配置信息

prefork

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

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

  • MinSpareServers : 进程数最少数量

  • MaxSpareServers : 最大的空闲进程数

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

  • MaxClients : 最大的并发数量

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

worker模块的配置信息

worler

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

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

  • MaxClients : 最大的并发数量

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

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

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

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

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

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

加载动态模块

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

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

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

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

默认主页的路径

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

7、 定义站点主页面

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

默认主页

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

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

  • 基于文件系统路径控制


...


...


...
  • 基于URL路径控制


...


...

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

  • 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

Dir

下面是一些示例


Options Indexes 允许查看索引 



Options FollowSymLinks  允许访问连接




order deny,allow
deny from 172.16. 100.100
allow from 172.16


order allow,deny
deny from 172.16.100.100
allow from 172.16

10、日志设定

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

错误日志

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

ErrorLog

访问日志

定义日志的格式

LogFormat

日志的使用

LogUse

参考帮助:

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,这是国际通用的字符集。

设定默认的字符集

12、定义路径别名

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

设置别名路径

设置了别名之后,当我们通过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


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

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

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

(二)基于组的认证配置

1、定义安全域


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

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

基于组的认证配置示例


Options None
AllowOverride None
AuthType Basic
AuthName "Administator private"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
AuthGroupFile "/etc/httpd/conf.d/.htgroup"
Require group webadmins

vim /etc/httpd/conf.d/.htgroup
webadmins:hehe haha

14、虚拟主机

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

基于IP的控制


ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"


ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"


ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"

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

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

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


ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"


ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"


ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"

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

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

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


ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"


ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"


ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"

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

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


ServerName FQDN
DocumentRoot “/path"

其它可用指令:

ServerAlias:虚拟主机的别名;可多次使用
ErrorLog: 错误日志
CustomLog:访问日志


Alias

15、status页面

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

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

LoadModule status_module modules/mod_status.so



SetHandler server-status
Order allow,deny 
Allow from 172.16



ExtendedStatus On 显示扩展信息

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

Server-Status

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


推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 最近帮人用Apache+Tomcat在同一台IP的服务器上设置多域名指向不同网站站点,花费了不少的时间。尤其是配置信息的时候,从网上找的资料有很多是错误的,误认不浅。所以今天特意把 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • nginx+多个tomcat
    学习nginx的时候遇到的问题:nginx怎么部署两台tomcat?upstream在网上找的资源,我在nginx配置文件(nginx.conf)中添加了两个server。结果只显 ... [详细]
  • ZooKeeper 学习
    前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper是个什么东西吗?如果别人面试官让你给他讲讲ZooKeeper是个什么东西, ... [详细]
  • 本文主要介绍关于linux文件描述符设置,centos7设置文件句柄数,centos7查看进程数的知识点,对【Linux之进程数和句柄数】和【linux句柄数含义】有兴趣的朋友可以看下由【东城绝神】投 ... [详细]
author-avatar
潮人搭配师er氵ic_161
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有