• http-2.2


    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 显示扩展信息
    
  • 相关阅读:
    java synchronized
    Java多线程的常见例子
    List,ArrayList
    BufferedInputStream与BufferedOutputStream
    super,this
    ServletConfig与ServletContext
    [转] 编写高效的 CSS 选择器
    浏览器是怎样工作的:渲染引擎,HTML解析
    sublime插件insertDate显示ISO时间
    《十日谈》摘要1
  • 原文地址:https://www.cnblogs.com/shenxm/p/8461458.html
Copyright © 2020-2023  润新知