zoukankan      html  css  js  c++  java
  • httpd-2.4安装配置

    接收请求的类型:
    并发访问响应模型:
    单进程I/O模型:启动一个进程处理用户请求,这意味着一次只能处理一个请求,多个请求被串行响应;
    多进程I/O模型:由父进程并行启动多个子进程,每个子进程响应一个请求;
    复用的I/O结构:一个进程响应n个请求;
    多线程模式:一个进程生成n个线程,一个线程处理一个请求;
    事件驱动(event-driven):一个进程直接n个请求
    复用的多进程I/O结构:启动多个进程,每个进程生成n个线程;
    响应的请求数量:m*n

    http的特性:
    高度模块化:core+modules
    DSO:dynamic shared object
    MPM:Multipath processing Modules(多路处理模块)
    prefork:多进程模型,每个进程响应一个请求;
    一个主进程:负责生成子进程及回收子进程,负责创建套接字,负责接收请求,并将其派发给某子进程进行处理;
    n个子进程:每个子进程处理一个请求;
    工作模型:会预先生成几个空闲进程,随时等待用于响应用户请求,最大空闲和最小空闲;
    worker:多进程多线程模型,每线程处理一个用户请求;
    一个主进程:负责生成子进程,负责创建套接字,负责接收请求,并将其派发给某子进程进行处理;
    多个子进程:每个子进程负责生成多个线程;
    每个线程:负责响应用户请求;
    并发响应数量:m*n
    m:子进程数量
    n:每个子进程所能创建的最大线程数量;
    event:事件驱动模型,多进程模型,每个进程响应多个请求;
    一个主进程:负责生成子进程,负责创建套接字,负责接收请求,并将其派发给某子进程进行处理;
    子进程:基于事件驱动机制直接响应多个请求;

    httpd的程序版本:
    httpd 1.3:官方已停止维护
    httpd 2.0:
    httpd 2.2:
    httpd 2.4:目前最新稳定版

    httpd的功能特性:
    CGI:Common Gateway Interface
    虚拟主机:IP,PORT,FQDN
    反射代理
    负载均衡
    路径别名
    丰富的用户认证机制
    basic
    digest
    支持第三方模块
    ...

    Centos 6:httpd 2.2
    程序环境:
    配置文件:
    /etc/ttpd/conf/httpd.conf
    /etc/httpd/conf.d/*.conf
    服务脚本:
    /etc/rc.d/init.d/httpd
    脚本配置文件:/etc/sysconfig/httpd
    主程序文件:
    /usr/sbin/httpd
    /usr/sbin/httpd.event
    /usr/sbin/httpd.worker
    日志文件:
    /var/log/httpd:
    access_log:访问日志
    error_log:错误日志
    站点文档:
    /var/www/html
    模块文件路径:
    /usr/lib64/httpd/modules

    CentOS 7:httpd-2.4
    程序环境:
    配置文件:
    /etc/httpd/conf/httpd.conf
    /etc/httpd/conf.d/*.conf
    模块相关的配置文件:/etc/httpd/conf.modules.d
    主程序文件:
    /usr/sbin/httpd
    httpd 2.4支持MPM动态切换
    日志文件:
    /var/log/httpd:
    access_log:访问日志
    error_log:错误日志
    站点文档:
    /var/www/html
    模块文件路径:
    /usr/lib64/httpd/modules
    服务控制:
    systemctl enable|disable httpd.service
    systemctl {start|stop|restart|status} httpd.service

    MPM:prefork,worker,event
    prefork:两级进程模型,父进程管理子进程,每个子进程响应一个请求;
    worker:三级模型,父进程管理子进程,子进程通过线程响应用户请求,每线程处理一个用户请求;
    event:两级模型,父进程管理子进程,子进程通过event-driven机制直接响应n个请求;

    httpd-2.4常用配置
    主配置文件:/etc/httpd/conf/httpd.conf
    ###Section 1:Global Environment
    ###Section 2:'Main' Server configuration
    ###Section 3:Virtual Hosts

    配置格式:
    	directive value
    	directive:不区分字符大小写;
    	value:为路径时,是否区分大小写,取决于文件系统;
    常用配置:
    	1.修改监听的IP和PORT
    		Listen [IP:]PORT
    			1.省略IP表示为0.0.0.0
    			2.Listen指令可重复出现多次
    				Listen 80
    				Listen 8080
    			3.修改监听socket,重启服务进程方可生效;
    	2.持久连接
    		Persistent Connection:tcp连接建立后,每个资源获取完成后不全断开连接,而是继续等待其它资源的进程;
    
    		如何断开?
    			数量限制
    			时间限制
    		KeepAlive On|Off
    		KeepAliveTimeout 15
    		MaxKeepAliveRequests 100
    
    		测试:
    		telnet WEB_SERVER_IP PORT
    		GET /URL HTTP/1.1
    		Host:WEB_SERVER_IP
    
    		注意:httpd-2.4的KeepAliveTimeout可以是毫秒级
    	3.MPM
    		httpd-2.2不支持同时编译多个MPM模块,所以只能编译选定要使用哪个,CentOS 6的rpm包专门提供了三个应用程序文件,httpd(prefork),httpd.worker,httpd,event,分别用于实现对不同的MPM机制的支持,确认现在使用的是哪个程序文件的方法:
    			ps aux | grep httpd
    
    		默认使用的为/usr/sbin/httpd,其为prefork的mpm模块;
    		查看httpd程序的模块列表;
    			查看静态编译的模块: 
    			 #httpd -l
    			查看静态编译及动态编译的模块:
    			 #httpd -M
    		更换 使用httpd程序,以支持其它MPM机制:
    			/etc/sysconfig/httpd
    				HTTPD=/usr/sbin/httpd.{worker,event}
    		注意:重启服务方可生效
    
    		MPM配置:
    			prefork的配置:
    			<ifModule prefork.c>
    			StartServers 8
    			MinSpareServers 5
    			MaxSpareServers 20
    			ServerLimit 256
    			MaxClients 256
    			MaxRequestsPerChild 4000
    			</ifModule>
    
    			worker的配置:
    			<ifModule worker.c>
    			StartServers 4
    			MaxClients 300
    			MinSpareThreads 25
    			MaxSpareThreads 75
    			ThreadsPerChile 25
    			MaxRequestsPerChild 0
    			</ifModule>
    
    PV,UV
    PV:Page View
    UV:User View
    IP:
    
    
    DSO:
    	配置指定实现模块加载
    	LoadModule <mod_name> <mod_path>
    
    	模块文件路径可使用相对路径:
    		相对于ServerRoot(默认/etc/httpd)
    
    定义"Main" Server的文档页面路径
    	ServerName
    		ServerName [scheme://]fully-qualified-domain-name[:port]
    	DocumentRoot " "
    		DocumentRoot directory-path
    
    	文档路径映射:
    		DocumentRoot指向的路径为URL路径的起台位置
    			其相当于站点URL的根路径;
    站点访问控制常见机制
    	可基于两种机制指明对哪些资源进行何种访问控制
    
    	文件系统路径:
    		<Directory "">
    		...
    		</Directory>
    
    		<File "">
    		...
    		</File>
    
    		<FileMatch "PATTERN">
    		...
    		</FileMatch>
    
    	URL路径:
    		<Location "">
    		...
    		</Location>
    
    		<LocationMatch "PATTERN">
    		...
    		</LocationMatch>
    
    
    	<Directory>中基于源地址实现访问控制
    		1.Options
    			后跟1个或多个以空白字符分割的“选项列表”;
    				Index:指明URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户;
    				FollowSymLinks:允许跟踪符号链接文件所指向的源文件;
    				None:
    				All:
    		httpd-2.2
    			1.AllowOverride
    				与访问控制相关的哪些指令可以放在.htaccess文件(每个目录下都可以有一个)中;
    				All:
    				None
    			2.order和allow、deny
    				order:定义生效次序,写在后面的表示默认法则;
    				Alow from,Deny from
    				来源地址:
    					IP
    					NetAddr:
    						172.16
    						172.16.0.0
    						172.16.0.0/16
    						172.16.0.0/255.255.0.0
    		httpd-2.4
    			Requires
    
    
    日志设定:
    	日志类型,访问日志,错误日志
    
    	错误日志:
    		Error logs/error_log
    		LogLevel warn
    			Possible values include:debug,info,notice,warn,error,crit,alert,emert
    
    	访问日志:
    		LogFormat ""%h%l%u%t"%r"%r"%>s%b"%{Referer}i""%{User-Agent}|""combined
    		CustomLog logs/access_log combined
    
    		LogFormat format strings:
    			http://httpd.apache.org/docs2.2/mod/mod_log_config.html#formats
    
    			%h:客户端IP地址
    			%l:Remote User,通常为一个减号("-")
    			%u:Remote user(from auth;may be bogus if return status(%s)ls 501);非为登录访问时,其为一个减号;
    			%t:服务器收到请求的时间;
    			%r:First line of request,请求报文的首行,记录了此次请求的"方法","URL"以及协议版本
    			%>s:响应状态码;
    			%b:响应报文的大小,单位是字节,不包括响应的文的http首部;
    			%{Referer}i:请求报文中首部"referer"的值,即是从哪个页面中的超链接跳转至当前页面的;
    			%{User-Agent}:请求报文中首部"User-Agent"的值,即发出请求的应用程序;
    
    基于用户的访问控制
    认证质询:
    	WWW-Authenticate:响应码为401,拒绝客户请求,并说明要求客户端提供账号和密码;
    认证:
    	Authenticate:客户端用户填入账号和密码后再次发送请求报文,认证通过时,则服务器发送响应的资源;
    	认证方式有两种:
    		basic:明文
    		digest:消息摘要认证
    
    安全域:需要用户认证后方能访问的路径,应该通过名称对其进行标识,以便于告知用户认证的原因;
    
    账号存储位置:
    	文本文件
    	SQL数据库
    	ldap目录存储
    
    basic认证配置示例:
    	1.定义安全域
    		<Directory "/var/www/html/admin">
    			Options None
    			AllowOverride None
    			AuthType Basic
    			AuthName "String"
    			AuthUserFile "/etc/httpd/conf.d/.passwd"
    			Require user username1 username2 ...
    		</Directory>
    
    		允许账号中的所有用户登录访问:
    			Require valid-user
    
    	2.提供账号和密码存储(文本文件)
    		使用专用命令完成此类文件的创建及用户管理
    			htpasswd [options] /etc/httpd/conf.d/.passwd
    				-c:自动创建指定文件,仅在首次创建使用
    				-m:md5格式加密
    				-s:sha格式加密
    				-b:命令行中直接输入密码
    
    
    
    虚拟主机:
    	基于IP的虚拟主机
    	<VirtualHost 192.168.2.104:80>
    		ServerName www.ilinux.com
    		DocumentRoot "/data/web/ilinux"
    		<Directory "/data/web/ilinux">
    			Options None
    			AllowOverride None
    			Require all granted
    		</Directory>
    	CustomLog "logs/ilinux_access_log" combined
    	</VirtualHost>
    
    	<VirtualHost 192.168.2.105:80>
    		ServerName www.iunix.com
    		DocumentRoot "/data/web/iunix"
    		<Directory "/data/web/iunix">
    			Options None
    			AllowOverride None
    			Require all granted
    		</Directory>
    	CustomLog "logs/iunix_access_log" combined
    	</VirtualHost>
    
    	基于端口的虚拟主机
    	<VirtualHost>
    	ServerName www.ilinux.com
    		DocumentRoot "/data/web/ilinux"
    		<Directory "/data/web/ilinux">
    			Options None
    			AllowOverride None
    			Require all granted
    		</Directory>
    		CustomLog "logs/ilinux_access_log" combined
    	</VirtualHost>
    	
    	Listen 10080
    	<VirtualHost 192.168.2.104:10080>
    		ServerName www.iunix.com
    		DocumentRoot "/data/web/iunix"
    		<Directory "/data/web/iunix">
    			Options None
    			AllowOverride None
    			Require all granted
    		</Directory>
    	CustomLog "logs/iunix_access_log" combined
    	</VirtualHost>
    
    	基于域名的虚拟主机
    	<VirtualHost 192.168.2.104:80>
    		ServerName www.ilinux.com
    		DocumentRoot "/data/web/ilinux"
    		<Directory "/data/web/ilinux">
    			Options None
    			AllowOverride None
    			Require all granted
    		</Directory>
    		CustomLog "logs/ilinux_access_log" combined
    	</VirtualHost>
    
    
    <VirtualHost 192.168.2.104:80>
    	ServerName www.iunix.com
    	DocumentRoot "/data/web/iunix"
    	<Directory "/data/web/iunix">
    		Options None
    		AllowOverride None
    		Require all granted
    	</Directory>
    	CustomLog "logs/iunix_access_log" combined
    </VirtualHost>
    
    注意:如果是httpd-2.2,则使用FQDN的虚拟主机时,需要事先使用如下指令:
    	NameVirtualHost IP:PORT
    
    status页面
    LoadModule staus_module modules/mod_status.so
    
    httpd-2.2
    <Location /server-status>
    	SetHandler server-status
    	Order allow,deny
    	Allow from 192.168
    </Location>
    
    httpd-2.4
    <Location /server-status>
    	SetHandler server-status
    	Require ip 192.168
    </Location>
    
    http://www.ilinux.com/server-status
    

    root@node2:~/e/net34#

  • 相关阅读:
    HTML5学习笔记第二节(Email标签(自动验证格式),Number标签,URL标签...)
    Ping检测工具(QQ皮肤实现)
    C#多线程|匿名委托传参数|测试您的网站能承受的压力|附源代码
    PostgreSQL抛错“不良的类型值: long”之解决
    jdbcTemplate.queryForInt()过时替换方法
    Windows Phone 实用开发技巧(27):创建透明Tile
    快乐技术沙龙技术分享之账户助手
    Windows Phone 实用开发技巧(11):让StackPanel中的控件靠右对齐
    Windows Phone 实用开发技巧(19):使用ProgressIndicator做进度显示
    Windows Phone 实用开发技巧(13):自定义Element Binding
  • 原文地址:https://www.cnblogs.com/feng-land/p/10023284.html
Copyright © 2011-2022 走看看