HTTP-2.2

httpd 配置文件的组成:
grep "Section" /etc/httpd/conf/httpd.conf
### Section 1: Global Environment
### Section 2: 'Main' server configuration
### Section 3: Virtual Hosts
配置格式:
directive value
directive:不区分字符大小写
value:为路径时,是否区分大小写,取决于文件系统
httpd2.2程序环境
rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/logs
/etc/httpd/modules
/etc/httpd/run
/etc/logrotate.d/httpd
/etc/rc.d/init.d/htcacheclean
/etc/rc.d/init.d/httpd
/etc/sysconfig/htcacheclean
/etc/sysconfig/httpd
/usr/lib64/httpd
/usr/lib64/httpd/modules
/usr/sbin/apachectl
/usr/sbin/htcacheclean
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
/usr/sbin/httxt2dbm
/usr/sbin/rotatelogs
/usr/sbin/suexec
/usr/share/doc/
/usr/share/man/man8/
/var/cache/mod_proxy
/var/lib/dav
/var/log/httpd
/var/run/httpd
/var/www
/var/www/cgi-bin
/var/www/error
/var/www/html
/var/www/icons 服务脚本:/etc/rc.d/init.d/httpd
配置文件:
/etc/sysconfig/httpd
/etc/httpd/conf/httpd.conf
服务控制和启动:
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
3)http协议
http 协议
http/0.9, http/1.0, http/1.1, http/2.0
stateless 无状态,服务器无法持续追踪访问者来源
解决http 协议无状态方法
cookie 客户端存放
session 服务端存放
http 事务:一次访问的过程
请求:request
响应:response
协议查看或分析的工具:
tcpdump
wireshark
tshark 1》显示服务器版本信息
ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
ServerTokens Prod[uctOnly] :Server: Apache
ServerTokens Major: Server: Apache/2
ServerTokens Minor: Server: Apache/2.0
ServerTokens Min[imal]: Server: Apache/2.0.41
ServerTokens OS: Server: Apache/2.0.41 (Unix)
ServerTokens Full (or not specified): Server: Apache/2.0.41
建议使用 ServerTokens Prod 2》修改监听的IP 和Port
Listen [IP:]PORT
省略IP表示为0.0.0.0
Listen 指令至少一个,可重复出现多次
Listen 80
Listen 8080
修改监听socket ,重启服务进程方可生效 3》持久连接
Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接。
断开条件:数量限制为100
时间限制:以秒为单位,httpd-2.4支持毫秒级
副作用:对并发访问量较大的服务器,持久连接功能会使有些请求得不到响应
折衷:使用较短的持久连接时间
设置:
KeepAlive On|Off
KeepAliveTimeout 15
MaxKeepAliveRequests 100
测试:telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1
Host: WEB_SERVER_IP 4》MPM(multi-processing module)多路处理模块。
prefork, worker, event(试验阶段)
httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个。
rpm 安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持。
1。确认方法:
ps aux | grep httpd
默认为/usr/sbin/httpd, 即prefork
2。查看静态编译的模块
httpd -l
3。查看静态编译及动态装载的模块
httpd –M
4。动态模块加载时,不需重启即生效。
5。动态模块路径
/usr/lib64/httpd/modules/
6。更换使用的httpd程序:
vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker
重启服务生效
pstree -p|grep httpd 查看进程和线程
7。Httpd 2.4与之不同
以动态模块方式提供
配置文件:/etc/httpd/conf.modules.d/00-mpm.conf
httpd –M |grep mpm
重启服务生效
pstree -p|grep httpd 查看进程和线程
8。prefork的默认配置
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256 最多进程数, 最大20000
MaxClients 256 最大并发
MaxRequestsPerChild 4000 子进程最多能处理的请求数量,在处理MaxRequestsPerChild个请求之后, 子进程将会被父进程终止,这时候子进程占用的内存就会释放( 为0时永远不释放)
</IfModule>
9。worker的默认配置
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0 无限制
</IfModule>
5》DSO:Dynamic Shared Object
加载动态模块配置
vim /etc/httpd/conf/httpd.conf
配置指定实现模块加载格式:
LoadModule <mod_name> <mod_path>
模块文件路径可使用相对路径,相对于ServerRoot,默认/etc/httpd
示例:
LoadModule auth_basic_module modules/mod_auth_basic.so
6》定义'Main' server 的文档页面路径
DocumentRoot “/path”
文档路径映射:
DocumentRoot 指向的路径为URL 路径的起始位置
示例:
DocumentRoot "/app/data“
http://HOST:PORT/test/index.html --> /app/data/test/index.html
注意:SELinux 和iptables
7》定义站点主页面
DirectoryIndex index.html index.html.var 8》站点访问控制常见机制
可基于两种机制指明对哪些资源进行何种访问控制。
访问控制机制有两种,分别是客户端来源地址,用户账号
文件系统路径:
<Directory “/path">
...
</Directory>
<File “/path/file”>
...
</File>
<FileMatch "PATTERN">
...
</FileMatch>
URL 路径:
<Location "">
...
</Location>
<LocationMatch "">
...
</LocationMatch>
示例:
<FilesMatch "\.(gif|jpe?g|png)$">
<Files “?at.*”> 通配符
<Location /status>
<LocationMatch "/(extra|special)/data"> 9》<Directory> 中“基于源地址”实现访问控制
(1) Options:
后跟1个或多个以空白字符分隔的选项列表,在选项前的+ ,- 表示增加或删除指定选项。
常见选项:
Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户。
FollowSymLinks:允许访问符号链接文件所指向的源文件
None:全部禁用
All:全部允许
示例:
<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options FollowSymLinks
</Directory>
<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options +Includes -Indexes
</Directory>
(2) AllowOverride:
与访问控制相关的哪些指令可以放在指定目录下的.htaccess (由AccessFileName 指定)文件中,覆盖之前的配置指令,但只对<directory> 语句有效。
AllowOverride All:所有指令都有效
AllowOverride None:.htaccess 文件无效
AllowOverride AuthConfig Indexes:除了AuthConfig和Indexes的其他指令都无法覆盖
(3) order和allow 、deny
order:定义生效次序,写在后面的表示默认法则生效。
Order allow,deny
Order deny,allow
Allow from
Deny from
allow.denv deny.allow
only allow yes yes
only deny no no
both no yes
none no yes 来源地址:
IP
网络:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0 (4)示例:
<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》日志设定
1。日志类型:
访问日志
错误日志
2。错误日志:
ErrorLog logs/error_log
LogLevel warn
loglevel 可选值:
debug, info, notice,warn,error,crit,alert,emerg
3。访问日志:
定义日志格式:
LogFormat format strings LogFormat "%h %l %u %t \"%r\" %>s %b\"%{Referer}i\" \"%{User-Agent}i\"" combined
使用日志格式:
CustomLog logs/access_log combined
参考帮助:
http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
%h 客户端IP地址
%l 远程用户,启用mod_ident才有效,通常为减号“-”
%u 验证(basic ,digest )远程用户, 非登录访问时,为一个减号“-”
%t 服务器收到请求时的时间
%r 即表示请求报文的首行,记录了此次请求的“方法”,"URL"以及协议版本
%>s 响应状态码
%b 响应报文的大小,单位是字节,不包括响应报文http 首部
%{Referer}i 请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的
%{User-Agent}i 请求报文中首部“User-Agent”的值,即发出请求的应用程序 11》设定默认字符集
AddDefaultCharset UTF-8
中文字符集:GBK, GB2312, GB18030:wq 12》定义路径别名
格式:Alias /URL/ "/PATH/"
DocumentRoot "/www/htdocs"
http://www.m.com/download/bash.rpm ==>/www/htdocs/download/bash.rpm
Alias /download/ "/rpms/pub/"
http://www.m.com/rpms/pub/bash.rpm ==>/www/htdocs/download/bash.rpm 13》基于用户的访问控制
1。认证质询:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码
2。认证:客户端用户填入账号和密码后再次发送请求报文,认证通过时,则服务器发送响应的资源
3。认证方式两种:
basic:明文
digest:消息摘要认证, 兼容性差
4。安全域:需要用户认证后方能访问的路径,应该通过名称对其进行标识,以便于告知用户认证的原因。
5。用户的账号和密码
虚拟账号:仅用于访问某服务时用到的认证标识
存储:文本文件,SQL 数据库,ldap 目录存储,nis等
6。basic 认证配置示例:
(1)定义安全域
<Directory “/path">
Options None
AllowOverride None
AuthType Basic
AuthName "Warning!“:随意写
AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"
Require user username1 username2 ...
</Directory>
Require valid-user:所有位于AuthUserFile文件中定义的用户都允许登录访问。
Require user user1 user2...:仅允许user1,user2等出现AuthUserFile文件中定义的特定几个用户登录,这些用户为虚拟用户,即非系统用户。
(2) 提供账号和密码存储(文本文件)
使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
-c :自动创建文件,仅应该在文件不存在时使用
-m :md5 格式加密
-s: sha 格式加密
-D :删除指定用户
7。基于组账号进行认证
(1)定义安全域
<Directory “/path">
AuthType Basic
AuthName "String“
AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"
AuthGroupFile "/PATH/HTTPD_GROUP_FILE"
Require group grpname1 grpname2 ...
</Directory>
(2)创建用户账号和组账号文件;
组文件:每一行定义一个组
GRP_NAME: username1 username2 ...
示例:
<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:wang mage
(3)远程客户端和用户验证的控制
Satisfy ALL|Any
ALL 客户机IP和用户验证都需要通过才可以
Any 客户机IP和用户验证, 有一个满足即可
示例:
Require valid-user
Order allow,deny
Allow from 192.168.1
Satisfy Any
14》虚拟主机
1。站点标识:socket
IP 相同,但端口不同
IP 不同,但端口均为默认端口
2。FQDN 不同;
请求报文中首部
Host: www.m.com
3。有三种实现方案:
基于ip :为每个虚拟主机准备至少一个ip 地址
基于port :为每个虚拟主机使用至少一个独立的port
基于FQDN :为每个虚拟主机使用至少一个FQDN
4。注意:
一般虚拟机不要与main主机混用,因此要使用虚拟主机,一般先禁用main主机。
禁用方法:注释中心主机的DocumentRoot。
这是因为其在后面,配置文件中默认是后面的配置会覆盖前面。
使用servername时要注意dns问题。
5。虚拟主机的配置方法:
<VirtualHost IP:PORT>
ServerName FQDN
DocumentRoot “/path"
</VirtualHost>
建议:上述配置存放在独立的配置文件中
6。其它可用指令:
ServerAlias:虚拟主机的别名,可多次使用
ErrorLog:错误日志
CustomLog:访问日志
<Directory “/path">
</Directory>
Alias
7。基于IP 的虚拟主机示例:
<VirtualHost 172.16.100.6:80>
DocumentRoot "/htdocs1"
</VirtualHost>
<VirtualHost 172.16.100.7:80>
DocumentRoot "htdocs2"
</VirtualHost>
<VirtualHost 172.16.100.8:80>
DocumentRoot "htdocs3"
</VirtualHost>
注意:
当你使用httpd -t进行检查时会出现报错,而报的错误是servername没有,这个不用在意,因为没有写。
本机要配上所有ip地址并能够用于通信。
8。基于端口的虚拟主机:可和基于IP的虚拟主机混和使用
listen 808
listen 8080
<VirtualHost 172.16.100.6:80>
ServerName www.a.com
DocumentRoot "htdocs1"
</VirtualHost>
<VirtualHost 172.16.100.6:808>
ServerName www.b.net
DocumentRoot "htdocs2"
</VirtualHost>
<VirtualHost 172.16.100.6:8080>
ServerName www.c.org
DocumentRoot "htdocs3"
</VirtualHost>
注意:
httpd要监听这里指明的所有端口。
使用servername时要注意DNS。
要不就不使用虚拟机的dns,自己配置好dns。
要不就使用虚拟机的dns,并在/etc/hosts中配好。 9。基于FQDN的虚拟主机:
NameVirtualHost *:80,httpd2.4 不需要此指令
<VirtualHost *:80>
ServerName www.a.com
DocumentRoot "htdocs1"
</VirtualHost>
<VirtualHost *:80>
ServerName www.b.net
DocumentRoot "htdocs2"
</VirtualHost>
<VirtualHost *:80>
ServerName www.c.org
DocumentRoot "htdocs3"
</VirtualHost>
注意:同样是注意dns。 15》status页面
LoadModule status_module modules/mod_status.so
<Location /server-status>
SetHandler server-status
Order allow,deny
Allow from 172.16
</Location>
ExtendedStatus On 显示扩展信息

随机推荐

  1. auto_ptr 实现

    #ifndef MYAUTOPTR_H #define MYAUTOPTR_H template<typename _T> class MyAutoPtr { private: _T* _ ...

  2. Apollo源码解析看一文就够

    对于配置中心我们先抛出问号三连,什么是配置中心?为什么要用配置中心?配置中心怎么用? 笔者说说自己理解的配置中心,个人观点的十六字 消息存储 消息推送 环境隔离 灰度发布 今天我们先来看Apollo配 ...

  3. python的for else语句

    Python循环中的else语句 绝大部分编程语言中都有条件判断语句,比如 if … else ,在大部语言中,else 一般只在条件判断语句中出现,与 if 语句配套出现,不过在 Python 中, ...

  4. [教程] NETGEAR R7800 路由器TFTP刷机方法(适用于.img格式固件各种刷)

    本教程是我参照R7800的OP/LEDE固件交流群内文件做的教程,可以说是完善.补充吧. 本帖适用于:① 原厂固件刷原厂固件:② 原厂固件刷第三方固件(.img格式):③ 第三方固件刷回原厂固件(.i ...

  5. 【转】Golang 关于通道 Chan 详解

    原文:http://blog.csdn.net/netdxy/article/details/54564436 在用 chan 类型时,发生死锁的错误,表面上看不出什么问题 ------------- ...

  6. Codeforces Round #271 (Div. 2) D. Flowers (递推 预处理)

    We saw the little game Marmot made for Mole's lunch. Now it's Marmot's dinner time and, as we all kn ...

  7. yarn之安装依赖包

    安装依赖关系 yarn install用于安装项目的所有依赖项.依赖关系从您的项目package.json文件中检索,并存储在yarn.lock文件中. 开发包时,安装依赖关系最常见的是在 您刚刚检出 ...

  8. CodeForces484A Bits(贪心)

    CodeForces484A Bits(贪心) CodeForces484A 题目大意:给出范围[A.B].期望你给出某个数X满足X属于[A,B],而且X转成二进制的1的个数最多.假设有多个给出最小的 ...

  9. iOS 基于 MVC 的项目重构总结

    关于MVC的争论 关于MVC的争论已经有非常多,对此我的观点是:对于iOS开发中的绝大部分场景来说,MVC本身是没有问题的,你觉得的MVC的问题,一定是你自己理解的问题(资深架构师请自己主动忽略本文) ...

  10. Jenkins安装与使用

    一.Jenkins简介 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执行的工作 二.下载与安装 下载地址 ...