Apache Httpd 2.2 配置全解析(CentOS6)
来源:互联网 发布:上海大学网络教学平台 编辑:程序博客网 时间:2024/06/05 04:27
Apache Httpd 2.2 配置全解析(CentOS6)
Published On September 27, 2017
服务器应用
通常我们所说的,服务器应用一般会有两种类型,http服务器、应用程序服务器 ,而http服务器的典型代表有Apache Http Server和Nginx,应用程序服务器的典型代表则有IIS,Tomcat,jetty。
很多做过java开发的朋友应该都知道 Apache Tomcat,但是二者之间具体有什么区别和联系呢?大家可以自己上网查询下资料,也可以自己参考 https://www.zhihu.com/question/32212996,去了解一下。
当然,也可以去这个网站,查看目前主流服务器的市场占有率。https://www.netcraft.com/
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 –tservice httpd configtest
httpd的服务脚本
/etc/rc.d/init.d/httpd
httpd的服务脚本的配置文件
/etc/sysconfig/httpd
服务控制和启动
chkconfig httpd on|offservice {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/httpdaccess_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 valuedirective: 指令,不区分字符大小写value: 值为路径时,是否区分大小写,取决于文件系统
上面所述的所有的内容,都可以执行
rpm -ql httpd
中查看到。
了解了上面的基本信息之后,我们来启动一下httpd 服务。
root@centos6 ~]$service httpd startStarting httpd: httpd: apr_sockaddr_info_get() failed for centos6.pojun.techhttpd: 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
文件。
这样的话,再重启的时候,就不会有问题提示了。
httpd 2.2 的常见配置
这里所说的配置信息都位于
/etc/httpd/conf/httpd.conf
1、显示服务器的版本信息
显示服务器的版本信息的意思是说,我们在日常工作中,可能会通过一些手段,获取某些网段的服务器信息,如果我们的HTTP服务器的信息对于一个陌生的用户完全暴露,将会大大导致服务器的安全风险。
下图是我们通过工具获取到Microsoft的服务器信息(吐槽下,微软自己竟然还用别人的服务器,大家风范哪里去了(●’◡’●))。
下面是我本机的Http 2.2 服务器的信息
[root@centos6 ~]$curl -I 172.18.2.66HTTP/1.1 200 OKDate: Tue, 26 Sep 2017 09:22:39 GMTServer: Apache/2.2.15 (CentOS) Last-Modified: Mon, 25 Sep 2017 07:28:24 GMTETag: "320951-0-559fe80fa6ca6"Accept-Ranges: bytesConnection: closeContent-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
通常来说,推荐使用 prod 方式,暴露的信息越少,相对的也就乐安全。
2、修改监听的IP和PORT
配置的格式为
Listen [IP:]PORT
- 省略IP表示为0.0.0.0;
- Listen指令至少一个,可重复出现多次
- 修改监听socket,重启服务进程方可生效
3、持久连接
Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接。
断开持久连接的条件:
- 数量限制:假设设定的100
- 时间限制:以秒为单位,HTTPD-2.4支持毫秒级。
副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应
解决办法:使用较短的持久连接时间。
4、MPM( Multi-Processing Module)多路处理模块
httpd 2.2 提供了三种不同类型的多路处理模块。prefork,worker,event(实验阶段)。 想要指定相应的处理模块,修改
/etc/sysconfig/httpd
文件。
每一种多路处理模块都有相应的配置,打开
/etc/httpd/conf/httpd.conf
prefork模块的配置信息
其中参数的含义如下所示。
StartServers
: 服务开始时的默认进程数MinSpareServers
: 进程数最少数量MaxSpareServers
: 最大的空闲进程数ServerLimit
: 最大的进程数,最大20000MaxClients
: 最大的并发数量MaxRequestsPerChild
: 子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)
worker模块的配置信息
其中参数的含义如下所示。
StartServers
: 服务开始时的默认进程数MaxClients
: 最大的并发数量MinSpareThreads
: 最小的空闲线程数量,低于这个数量,系统就会立马开启新的进程MaxSpareThreads
: 最大的空闲线程数量,这个值可能会与StartServers
值冲突ThreadPerChild
: 每个进程支持的线程数量,因为这个值会导致StartServers
和MaxSpareThreads
值产生冲突。MaxRequestsPerChild
: 子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)
5、DSO: Dynamic Shared Object 动态模块配置
使用
httpd -M
命令可以查看目前已经加载的动态模块。
配置指定实现模块加载格式:
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的文档页面路径
所谓默认主页的意思就是说,当我们只通过域名访问的时候,系统会默认跳转到某一页面,这个页面就是默认主页,所以这里可以设置默认主页的路径。
DocumentRoot指向的路径为URL路径的起始位置
7、 定义站点主页面
站点主页面,也就是我们所说的默认首页啦。
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
下面是一些示例
<Directory /web/docs>Options Indexes 允许查看索引 </Directory><Directory /web/docs/spec>Options FollowSymLinks 允许访问连接</Directory><files "*.txt">order deny,allowdeny from 172.16. 100.100allow from 172.16</files><files "*.txt">order allow,denydeny from 172.16.100.100allow from 172.16</files>
10、日志设定
日志的类型有两种 访问日志,错误日志
错误日志
loglevel 可选值:debug, info, notice, warn,errorcrit, alert, emerg
访问日志
定义日志的格式
日志的使用
参考帮助: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
<Directory “/path">Options NoneAllowOverride NoneAuthType 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 BasicAuthName "String“AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"AuthGroupFile "/PATH/HTTPD_GROUP_FILE"Require group grpname1 grpname2 ...</Directory>
2、 创建用户账号和组账号文件,组文件:每一行定义一个组
基于组的认证配置示例
<Directory "/www/htdocs/admin">Options NoneAllowOverride NoneAuthType BasicAuthName "Administator private"AuthUserFile "/etc/httpd/conf.d/.htpasswd"AuthGroupFile "/etc/httpd/conf.d/.htgroup"Require group webadmins</Directory>vim /etc/httpd/conf.d/.htgroupwebadmins:hehe haha
14、虚拟主机
(一) 基于ip:为每个虚拟主机准备至少一个ip地址
基于IP的控制
<VirtualHost 172.16.100.6:80>ServerName www.a.comDocumentRoot "/www/a.com/htdocs"</VirtualHost><VirtualHost 172.16.100.7:80>ServerName www.b.netDocumentRoot "/www/b.net/htdocs"</VirtualHost><VirtualHost 172.16.100.8:80>ServerName www.c.orgDocumentRoot "/www/c.org/htdocs"</VirtualHost>
(二) 基于port:为每个虚拟主机使用至少一个独立的port
基于端口的配置,可以针对一个主机监听不同的端口,不过一定要注意的就是,在配置文件之前一定要加上
listen 端口号
# 这两个listen如果不加上的话,基于端口的配置将不起作用,因为没有监听这两个端口啊。listen 808listen 8080<VirtualHost 172.16.100.6:80>ServerName www.a.comDocumentRoot "/www/a.com/htdocs"</VirtualHost><VirtualHost 172.16.100.6:808>ServerName www.b.netDocumentRoot "/www/b.net/htdocs"</VirtualHost><VirtualHost 172.16.100.6:8080>ServerName www.c.orgDocumentRoot "/www/c.org/htdocs"</VirtualHost>
(三) 基于FQDN:为每个虚拟主机使用至少一个FQDN
基于域名的虚拟主机。这里非常重要的一点就是,如果要使用这种方式,就必须要将
NameVirtualHost *:80
加上。入股不加的话,是没有什么效果的。
# 这句话一定要加上NameVirtualHost *:80 <VirtualHost *:80>ServerName www.a.comDocumentRoot "/www/a.com/htdocs"</VirtualHost><VirtualHost *:80>ServerName www.b.netDocumentRoot "/www/b.net/htdocs"</VirtualHost><VirtualHost *:80>ServerName www.c.orgDocumentRoot "/www/c.org/htdocs"</VirtualHost>
总结一下虚拟主机的配置方法
虚拟主机的配置方法结构如下所示,建议将配置存放在独立的配置文件中
<VirtualHost IP:PORT>ServerName FQDNDocumentRoot “/path"</VirtualHost>
其它可用指令:
ServerAlias:虚拟主机的别名;可多次使用ErrorLog: 错误日志CustomLog:访问日志<Directory "/path"></Directory>Alias
15、status页面
statue 页面是编译在动态模块中,如果要使用这个功能,就要将这个动态模块加入到配置文件中。
# 如果下面这行被注释掉的了话,一定要去掉注释,# 如果没有这个模块的话,就手动添加上LoadModule status_module modules/mod_status.so<Location /server-status>SetHandler server-statusOrder allow,deny Allow from 172.16</Location>ExtendedStatus On 显示扩展信息
搭建成功的状态页面如下图所示
经过上面的几项配置,我们已经大体了解了Apache httpd 2.2 的基本设置,如果想要详细的配置的话可以参考Apache 的官方文档,http://httpd.apache.org/docs/2.2/ ,若有疑问,欢迎留言。
博客转自曲良同学 http://www.pojun.tech
- Apache Httpd 2.2 配置全解析(CentOS6)
- Apache Httpd 2.2 配置全解析(CentOS6)
- 解析apache的httpd.conf配置内容
- apache httpd 2.2 + tomcat 配置
- Apache httpd安装配置
- httpd-apache服务器配置
- apache httpd.conf 配置
- apache httpd.conf配置
- CentOS6.4 中httpd Apache安装方法
- Centos6.5-Yum安装Apache-httpd
- Apache httpd.conf配置说明
- apache httpd.conf 配置详解
- Apache配置httpd.conf详解
- apache(httpd)网站VirtualHost配置
- Apache: Httpd安装与配置
- apache httpd.conf配置详解
- Linux下配置Apache httpd
- apache httpd安装及配置
- 八-4 模拟和测试其他浏览器
- 35年编程史沉淀下来的8条宝贵经验
- conda命令使用
- MySQL5.7.20安装
- MonkeyRunner环境搭建图解
- Apache Httpd 2.2 配置全解析(CentOS6)
- PHP监控网站运行状态
- matlab 画图函数plot
- FlexboxLayout UI布局
- 用VIM设置UTF-8编码的BOM标记
- Java并发编程实战笔记(6)-取消与关闭
- 图像基础18 人脸辨识——人脸定位
- 交换链表当中两个节点-LintCode
- java定时器