httpd服务Httpd服务httpd是一个开源软件,且一般用作web服务器来使用。目前最流行的web服务器软件叫做httpd,
在早期的http server就叫做apache,到了http server 2.0以后就改名为httpd了。
所以有时候听到apache服务器和httpd服务器其实都是指得是一个意思。
httpd生产的文件httpd目前有多个版本,主流有两个版本分别为:2.2、2.4,在安装了httpd软件之后,会生成配置文件。
这些文件有:
其中主配置文件:/etc/httpd/conf/httpd.conf
分段配置文件:/etc/httpd/conf.d/*.conf(一般自己定义配置在此文件下重新建立)
模块的目录:/etc/httpd/modules
日志目录:/etc/log/httpd/*
访问日志为:./access_log
错误日志为:./err_log
网页的存放目录:/var/www/html
httpd的特性:高度模块化: core + modules
DSO:dynamic shared object
MPM:Multipath processing Modules (多路处理模块)
prefork:多进程模型,每个进程响应一个请求、一个主进程:负责生成子进程及回收子进程;负责创建套接字;
负责接收请求,并将其派发给某子进程进行处理,每个子进程处理一个请求。
worker:多进程多线程模型,每线程处理一个用户请求、一个主进程:负责生成子进程、负责创建套接字、
负责接收请求、并将其派发给某子进程进行处理,每个子进程负责生成多个线程,每个线程负责响应用户请求;
并发响应数量为:子进程数量*子进程创建的最大线程数量。
event:事件驱动模型,多进程模型,每个进程响应多个请求、一个主进程 :负责生成子进程、负责创建套接字、
负责接收请求,并将其派发给某子进程进行处理,子进程基于事件驱动机制直接响应多个请求。
注:在/etc/httpd/conf.modules.d/00-mpm.conf切换工作模型
httpd的功能特性:CGI:Common Gateway Interface
虚拟主机:IP,PORT, FQDN
反向代理
负载均衡
路径别名
丰富的用户认证机制
basic
digest
支持第三方模块
服务控制:systemctl enable|disable httpd.service #开机启动与否
systemctl {start|stop|restart|status} httpd.service #单次操作状态
1、 监听地址端口在主配置文件中/etc/httpd/conf/httpd.conf:
Listen IP:PORT,表示监听在该IP的PORT端口上,如果不写IP,表示监听本机所有可用IP地址,
另外,Listen指令可以出现多次,表示监听不同IP及不同端口上,修改完成后需要重启生效
注意:在修改完配置文件后需要使用:httpd –t 检查语法,语法没有问题才可继续其它操作
2、 持久连接Persistent Connection:tcp连续建立后,每个资源获取完成后不全断开连接,而是继续等待其它资源请求的进行。
副作用:对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常响应。
解决方案:使用较短的持久连接时长,以及较少的请求数量;
KeepAlive On|Off 此功能开启|关闭
KeepAliveTimeout 15 时间限制15秒
MaxKeepAliveRequests 100 请求数量100
以上表示:当一个连接建立,时间超过15秒或请求数量超过100个时,服务器会主动断开。
3、 MPM文章开头已介绍,下面是配置选项与参数,
prefork的配置
worker的配置: 修改模型选项:/etc/httpd/conf.modules.d/00-mpm.conf 4、 DSO配置指令模块加载,格式如下:
LoadModule <module_name> <module_path>
模块路径可以是相对路径,相对ServerRoot指令指向的位置
配置文件:/etc/httpd/conf.modules.d/00-proxy.conf
5、 定义Main server 文档页面路径使用DocumentRoot指令,关联文档路径的映射
DocumentRoot指向路径问URL起始位置
如DocumetRoot “/var/www/html”
在本地有一个文件file在/var/www/html/filedir/file则URL访问路径为www.smartwy.com/filedir/file
6、 站点路径访问控制可基于两种机制指明对哪些资源进行何种访问控制:
文件系统路径
1,<Directory "/dir/">
...
</Directory>
2,<File "/dir/to/file">
...
</File>
3, <FileMatch "PATTERN">
...
</FileMatch>
下面以路径访问控制做简单介绍
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
AllowOverride:与访问控制相关的哪些执行可以放在.htacesss文件中,每个目录下都可以有一个 ,
但是使用.htacess会使得网站对目录下的资源解析变的非常慢,不推荐使用。ALL所有都可以放进去,None什么都不可以放。
Options:Indexs:指明的URL路径不存在与定义的主页面资源相符的资源文件时候,返回索引列表给用户,
目录浏览功能,一般关掉。
FollowSymLinks:允许跟踪符号链接文件所指向的源文件,跟踪符号链接,如果目录下存在软连接,则可以直接
访问软连接指向的文件
None:全部停用
All:全部启用
Httpd2.4使用:Require:对控制页面访问控制,
Require all granted 全部允许访问
Require ip *.*.*.* 指定ip允许访问
Require host host_name 指定主机名允许方法
Httpd2.2使用:Order allow,deny 检查次序
Deny(黑名单) from 172.16.12.1 不允许172.16.12.1地址访问
Allow(白名单) from 172.16 仅允许172.16网段的地址访问
注意:指定访问控制时较小集合域放在前面
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
7、 定义站点主页面DirectoryIndex index.html index.html.var
从左到右匹配到的文件,将作为默认主页返回
8、 日志访问日志:access_log | -`date`
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
%h:客户端IP地址;
%l:Remote User, 通常为一个减号(“-”);
%u:Remote user (from auth; may be bogus if return status (%s) is 401);非为登录访问时,其为一个减号;
%t:服务器收到请求时的时间;
%r:First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本;
%>s:响应状态码;
%b:响应报文的大小,单位是字节;不包括响应报文的http首部;
%{Referer}i:请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的;
%{User-Agent}i:请求报文中首部“User-Agent”的值;即发出请求的应用程序。
错误日志:error_log | -`date`
错误级别:debug, info, notice, warn, error, crit, alert, emerg,
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
9、 基于用户访问控制认证质询:
WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码;
认证:
Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源;
认证方式有两种:
basic:明文
digest:消息摘要认证
用户的账号和密码存放于何处?
虚拟账号:仅用于访问某服务时用到的认证标识
存储:
文本文件;
SQL数据库;
ldap目录存储;
格式如下:
编写完成后,systemctl restart httpd.service重启httpd服务, 在浏览器地址栏内输入相应域名,会出现以下界面,填入上方指定的用户与密码便可继续访问。 下面是账号与密码的创建与管理: Htpasswd:专用命令完成此类文件的创建及用户管理 htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE username -c:首次创建密码文件时使用,如再次使用会覆盖以前的密码文件 -m:md5格式加密 -s: sha格式加密 -D:删除指定用户 -b:批模式添加用户 htpasswd -b [options] /HTTPD_PASSWD_FILE username password 自定义密码文件路径,配置文件内路径要与实际文件路径相同, 使用组账号进行认证 组文件编写:group: user1 user2 …(一行定义一个组) 组成员访问时与普通访问相同,密码创建也相同。 注意:修改配置文件后,检查语法httpd –t ,没有问题,重启httpd服务,配置才可生效。 10、 虚拟主机一个物理主机可以服务与多个站点,每个站点可以通过一个或多个虚拟主机来实现。
有三种实现方案:
基于ip:为每个虚拟主机准备至少一个ip地址;
基于port:为每个虚拟主机使用至少一个独立的port;
基于FQDN:为每个虚拟主机使用至少一个FQDN;
基于ip和基于port只做介绍说明,基于FQDN做实验说明:
基于IP的虚拟主机示例(在/etc/httpd/conf.d/下新建**.conf文件):
<VirtualHost 172.16.100.6:80> #端口相同,ip不同(确定主机有两个ip)
ServerName www.a.com #虚拟服务器域名(基于IP与port实验没有影响)
DocumentRoot "/www/dir" #指定站点根目录,实验时在根目录下新建index.html文件,
写一点测试信息在里面,方便查看实验效果。
</VirtualHost>
<VirtualHost 172.16.100.7:80>
ServerName www.b.net
DocumentRoot "/www/dir"
</VirtualHost>
可在浏览器地址栏中输入IP查看。
基于端口的虚拟主机(在/etc/httpd/conf.d/下新建**.conf文件):
<VirtualHost 172.16.100.6:80> #IP相同,端口不同
ServerName www.a.com
DocumentRoot "/www/dir"
</VirtualHost>
Listen 808 #开启监听808端口
<VirtualHost 172.16.100.6:808>
ServerName www.b.net
DocumentRoot "/www/dir"
</VirtualHost>
可在浏览器地址栏中输入IP:PORT查看。
基于FQDN的虚拟主机(在/etc/httpd/conf.d/下新建**.conf文件):
<VirtualHost 172.16.100.6:80>
ServerName www.a.com
DocumentRoot "/www/dir"
</VirtualHost>
<VirtualHost 172.16.100.6:80>
ServerName www.b.net
DocumentRoot "/www/dir"
</VirtualHost>
可在浏览器地址栏中输入域名查看。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
基于FQDN的虚拟主机实验:
1.1在/etc/httpd/conf.d目录下新建两个配置文件:
注意:如果是httpd-2.2,则使用基于FQDN的虚拟主机时,需要事先使用如下指令: NameVirtualHost IP:PORT 在设置的站点根目录下新建index.html文件, 编写完成后,httpd –t 检查语法,重启httpd服务。 1.2DNS正向解析: 将www.smartwy.com与www.magedu.com解析到172.16.253.190 /etc/named.rfc1912.conf添加以下内容 新建区域解析库/var/named/smartwy.com.zone编辑如下: 新建区域解析库/var/named/magedu.com.zone编辑如下: 以上配置要确保172.16.252.205处于被监听状态,与172.16.253.190联通, 执行named-checkconf, named-checkzone “smartwy.com” 区域解析库名, named-checkzone “magedu.com” 区域解析库名, rndc reload 重新加载。 1.3 测试(使用的域名有可能在公网已被使用,可把DNS设为172.16.252.205防止公网影响)
11、 内置的server-status页面在虚拟主机内添加/server-status选项
使用的是2.2版本,设置如下 <Location /server-status>
SetHandler server-status
Order allow,deny
Allow from 172.16
</Location>
Httpd –t 检查语法,重启服务, 在浏览器地址栏输入www.smartwy.com/server-status
|