apache(httpd)2.2和2.4未完
Httpd(apache)
	工作模式(FPM)
		prefork
			多进程模型,一个进程相应一个请求,消耗内存
			
		worker
			多线程模型,多进程生成,一个进程生成多个线程
			一个线程相应一个请求
			
		event
			事件驱动模型(异步),一个线程相应多个请求
			
		
		
	Centos6:httpd2.2
		安装方式
			rpm安装
			编译安装
		
		安装httpd
			# yum install httpd -y
			
		启动httpd
			service httpd start
		
		开机启动httpd
			chkconfig httpd on
		重启httpd
			service httpd restart
			
		查看安装的httpd的软件包
			# rpm -qa httpd
			返回结果:
			httpd-2.2.15-53.el6.centos.x86_64
			
		查看安装的httpd的配置文件
			# rpm -qc httpd
			返回结果:
			/etc/httpd/conf.d/welcome.conf
			/etc/httpd/conf/httpd.conf
			/etc/httpd/conf/magic
			/etc/logrotate.d/httpd
			/etc/sysconfig/htcacheclean
			/etc/sysconfig/httpd
			/var/www/error/HTTP_BAD_GATEWAY.html.var
			/var/www/error/HTTP_BAD_REQUEST.html.var
			/var/www/error/HTTP_FORBIDDEN.html.var
			/var/www/error/HTTP_GONE.html.var
			/var/www/error/HTTP_INTERNAL_SERVER_ERROR.html.var
			/var/www/error/HTTP_LENGTH_REQUIRED.html.var
			/var/www/error/HTTP_METHOD_NOT_ALLOWED.html.var
			/var/www/error/HTTP_NOT_FOUND.html.var
			/var/www/error/HTTP_NOT_IMPLEMENTED.html.var
			/var/www/error/HTTP_PRECONDITION_FAILED.html.var
			/var/www/error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
			/var/www/error/HTTP_REQUEST_TIME_OUT.html.var
			/var/www/error/HTTP_REQUEST_URI_TOO_LARGE.html.var
			/var/www/error/HTTP_SERVICE_UNAVAILABLE.html.var
			/var/www/error/HTTP_UNAUTHORIZED.html.var
			/var/www/error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
			/var/www/error/HTTP_VARIANT_ALSO_VARIES.html.var
			/var/www/error/contact.html.var
			/var/www/error/include/bottom.html
			/var/www/error/include/spacer.html
			/var/www/error/include/top.html
		解释:
			/etc/httpd/conf/httpd.conf
				httpd主配置文件
				
			/etc/httpd/conf.d/
				httpd的虚拟主机配置文件存放位置以.conf结尾
				
			/var/www/error/
				错误页面存放目录如404,302,500等错误页面
				
			/etc/logrotate.d/httpd
				启动脚本,启动文件
				配置文件/etc/sysconfig/httpd
				
			启动模型的配置文件
				/usr/sbin/httpd
					prefork启动文件(默认启动模式)
					
				/usr/sbin/httpd.event
					event模型的启动文件(2.2的event测试阶段的,不建议使用)
					
				/usr/sbin/httpd.worker
					worker模型的启动文件
			
		日志文件目录
			/var/log/httpd/
				access_log
					访问日志
					
				error_log
					web服务程序启动运行中的错误日志
					
		站点文档目录
			/var/www/html/
		
		配置文件的组成
			# grep "Section" /etc/httpd/conf/httpd.conf
			返回结果:
			### Section 1: Global Environment
			### Section 2: 'Main' server configuration
			### Section 3: Virtual Host
			
			解释:(第二段和第三段不建议同时使用)
				Section 1: Global Environment
					全局环境配置
					
				Section 2: 'Main' server configuration
					主服务器配置
				
				Section 3: Virtual Host
					虚拟主机配置

		常用配置:
			先备份httpd.conf主配置文件
				cp /etc/httpd/conf/httpd.conf{,.bak}

			修改httpd监听IP和(port)端口
				vim /etc/httpd/conf/httpd.conf
					利用/查找指定的内容如查找Listen,先在飞编辑模式下按/然后后面跟上Listen
					如果不是自己要找的,可以按n键向下搜索
					默认Listen监听的是所有IP地址端口是80
					省略ip表示监听本机所有IP,Listen可重复出现多次
					
					LISTEN格式
						Listen {ip:}port
							如:
								Listen 10.0.1.1:80
									这里是只监听10.0.1.1的80端口
			
								Listen 10.0.1.1:81
									这里只监听10.0.1.1的81端口
								
								Listen 83
									这里监听所有的IP地址的83端口
								
							可以写多个监听地址和端口如下
								Listen 80
								Listen 10.0.1.1:82
								
							修改好以后重启或者重新加载httpd的配置文件
								service httpd reload  重新加载配置文件
								
								service httpd restart  重启httpd
								
							
								
						Listen 80
					
					利用命令查看httpd监听端口和IP
						# netstat -lntup
						返回结果:
						......
						tcp        0      0 :::80                       :::*                        LISTEN      1580/httpd
						......
						这里可以看到httpd监听的是所有的IP地址,监听端口是80

					
		持久链接(会话保持时间)
			连接建立后,每个资源获取完成后不会断开连接,而是继续等待其他资源的请求的完成
			如何断开:
				数量限制:100个
				获取100个资源以后自动断开,哪怕你的时间没有到期
				
				时间限制:可以自己定义比如60秒
			
			副作用
				对并发访问量较大的服务器,有的服务器已经请求完资源,还有没有访问到的在排队等待
				持久连接功能会使有些请求得不到相应
				
			折中方案:
				使用较短的持久时间,比如5秒钟
				httpd2.4支持毫秒级的持久化设置
		配置httpd持久化设置
			vim /etc/httpd/con/httpd.conf
			找到KeepAlive Off
				KeepAlive Off
					默认是关闭状态
					如果不启用MaxKeepAliveRequests 100和KeepAliveTimeout 15就没有作用
				
				启用KeepAlive
					KeepAlive On
					
					MaxKeepAliveRequests 100
						最大连接请求连接数
					
					KeepAliveTimeout 15
						连接超时时长,单位默认是秒
						
					
				利用telnet测试长连接
					先来安装telnet
						yum install telnet -y
					
					利用命令测试连接
						telnet 10.0.1.1 80
						然后输入
						GET / HTTP/1.1
						Host: 10.0.1.1
						回车再回车,这时候发现连接并没有断开,说明持久连接生效了
			

		MPM,HTTPD各种模型,多路并发相应模型是如何实现的
			httpd-2.2不支持同时编译多个模块,最多在编译时选定一个
			rpm安装的包提供了三个二进制程序文件,分别用于实现不同MPM机制的实现和切换
			确认自己使用的哪种MPM模型
				# ps aux|grep httpd
				返回结果:
				root       2184  0.0  0.3 177400  3824 ?        Ss   Oct22   0:00 /usr/sbin/httpd
				apache     2186  0.0  0.2 177400  2464 ?        S    Oct22   0:00 /usr/sbin/httpd
				apache     2187  0.0  0.2 177400  2468 ?        S    Oct22   0:00 /usr/sbin/httpd
				apache     2188  0.0  0.3 177536  3156 ?        S    Oct22   0:00 /usr/sbin/httpd
				apache     2189  0.0  0.3 177536  3068 ?        S    Oct22   0:00 /usr/sbin/httpd
				apache     2190  0.0  0.3 177536  3052 ?        S    Oct22   0:00 /usr/sbin/httpd
				apache     2191  0.0  0.2 177400  2464 ?        S    Oct22   0:00 /usr/sbin/httpd
				apache     2192  0.0  0.2 177400  2464 ?        S    Oct22   0:00 /usr/sbin/httpd
				apache     2193  0.0  0.2 177400  2464 ?        S    Oct22   0:00 /usr/sbin/httpd
				root       2297  0.0  0.0 103312   872 pts/0    S+   00:04   0:00 grep httpd
				这里是prefork模型运行的httpd(/usr/sbin/httpd)
				如果是/usr/sbin//usr/sbin/httpd.worker就是worker模式
				如果是/usr/sbin//usr/sbin/httpd.event就是event模型
			
			更换httpd模型,改成worker模型
				vim /etc/sysconfig/httpd
					原
					#HTTPD=/usr/sbin/httpd.worker
					改后(把前面的#号注释去掉)
					HTTPD=/usr/sbin/httpd.worker
					修改好
				重启服务,这样启动起来以后以worker模型启动
					# service httpd restart
				
				利用ps命令查看httpd的启动模型
					# ps aux|grep httpd
					root       2341  0.0  0.4 177608  4048 ?        Ss   00:35   0:00 /usr/sbin/httpd.worker
					apache     2343  0.0  0.5 521868  5324 ?        Sl   00:35   0:00 /usr/sbin/httpd.worker
					apache     2344  0.0  0.5 521868  5332 ?        Sl   00:35   0:00 /usr/sbin/httpd.worker
					apache     2345  0.0  0.5 521868  5332 ?        Sl   00:35   0:00 /usr/sbin/httpd.worker
					root       2456  0.0  0.0 103312   872 pts/0    S+   00:35   0:00 grep httpd
					这里可以看到启动的进程是/usr/sbin/httpd.worker
				
			更换httpd模型,改成event模型
				vim /etc/sysconfig/httpd
					原
					#HTTPD=/usr/sbin/httpd.worker
			    	改后(把前面的#号注释去掉)
					HTTPD=/usr/sbin/httpd.event
			    	修改好
				
				重启服务,这样启动起来以后以event模型启动
			    	# service httpd restart
				
				利用ps命令查看httpd的启动模型
					# ps aux|grep httpd
					返回结果:
					root       2488  0.0  0.4 177604  4024 ?        Ss   00:40   0:00 /usr/sbin/httpd.event
					apache     2490  0.0  0.5 521864  5316 ?        Sl   00:40   0:00 /usr/sbin/httpd.event
					apache     2491  0.0  0.5 521864  5320 ?        Sl   00:40   0:00 /usr/sbin/httpd.event
					apache     2492  0.0  0.5 521864  5336 ?        Sl   00:40   0:00 /usr/sbin/httpd.event
					root       2575  0.0  0.0 103312   872 pts/0    S+   00:40   0:00 grep httpd
			
			先把httpd的模型改回prefork模型
				vim /etc/sysconf/httpd
					原
					HTTPD=/usr/sbin/httpd.worker
					改为先给注释掉,前面加一个#号就行
					#HTTPD=/usr/sbin/httpd.worker
				重启服务
					server httpd restart
					
			preforkr模型配置文件详解
				vim /etc/httpd/con/httpd.conf
					下面的这段话是以if判断来是否生效,根据启动MPM模型来判断是否生效
					根据模块来判断是启用那个配置文件生效
					这是prefork模型的配置文件详解
					<IfModule prefork.c>
					StartServers       8
					MinSpareServers    5
					MaxSpareServers   20
					ServerLimit      256
					MaxClients       256
					MaxRequestsPerChild  4000
					</IfModule>
					解释:
					<IfModule prefork.c>
						prefork模型模块运行的模块
					
					StartServers       8
						服务启动时服务器启动的进程数
						
					MinSpareServers    5
						最小空闲进程数
					
					MaxSpareServers   20
						最大空闲进程数
					
					ServerLimit      256
						为MaxClients生命周期内的进程数量最大值
					
					MaxClients       256
						最大并发请求数,最大启动进程数量
					
					MaxRequestsPerChild  4000
						一个服务最多能相应多少次的请求
					
					</IfModule>


			worker模型配置文件详解
				修改成worker模型请往上看
				启动/etc/sysconf/httpd下的HTTPD=/usr/sbin/httpd.worker
				然后重启服务即可
				if判断启动模块来生效哪个模块的配置文件
				<IfModule worker.c>
				StartServers         4
				MaxClients         300
				MinSpareThreads     25
				MaxSpareThreads     75
				ThreadsPerChild     25
				MaxRequestsPerChild  0
				</IfModule>
				解释:
				<IfModule worker.c>
                StartServers         4
					服务启动时服务器启动的进程数
				
                MaxClients         300
					服务器启动时最大的线程数
				
				MinSpareThreads     25
					最小空闲线程数
				
				MaxSpareThreads     75
					最大空闲线程数
				
				ThreadsPerChild     25
					每个进程,所启动的线程数
				
				MaxRequestsPerChild  0
					每个线程数所能最大相应请求的数量
				
				</IfModule>
			
			
			查看httpd直接编译进核心的模块列表
				# httpd -l
				返回结果:
				Compiled in modules:
				core.c(核心模块)
				prefork.c(prefork模块)
				http_core.c(httpd功能核心模块)
				mod_so.c(支持模块动态装卸载)

			查看httpd静态及动态装卸载的模块
				# httpd -M
				返回结果:
				httpd: apr_sockaddr_info_get() failed for Centos6-1
				httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
				Loaded Modules:
				core_module (static)
				mpm_prefork_module (static)
				http_module (static)
				so_module (static)
				auth_basic_module (shared)
				auth_digest_module (shared)
				authn_file_module (shared)
				authn_alias_module (shared)
				authn_anon_module (shared)
				authn_dbm_module (shared)
				authn_default_module (shared)
				authz_host_module (shared)
				authz_user_module (shared)
				authz_owner_module (shared)
				authz_groupfile_module (shared)
				authz_dbm_module (shared)
				authz_default_module (shared)
				ldap_module (shared)
				authnz_ldap_module (shared)
				include_module (shared)
				log_config_module (shared)
				logio_module (shared)
				env_module (shared)
				ext_filter_module (shared)
				mime_magic_module (shared)
				expires_module (shared)
				deflate_module (shared)
				headers_module (shared)
				usertrack_module (shared)
				setenvif_module (shared)
				mime_module (shared)
				dav_module (shared)
				status_module (shared)
				autoindex_module (shared)
				info_module (shared)
				dav_fs_module (shared)
				vhost_alias_module (shared)
				negotiation_module (shared)
				dir_module (shared)
				actions_module (shared)
				speling_module (shared)
				userdir_module (shared)
				alias_module (shared)
				substitute_module (shared)
				rewrite_module (shared)
				proxy_module (shared)
				proxy_balancer_module (shared)
				proxy_ftp_module (shared)
				proxy_http_module (shared)
				proxy_ajp_module (shared)
				proxy_connect_module (shared)
				cache_module (shared)
				suexec_module (shared)
				disk_cache_module (shared)
				cgi_module (shared)
				version_module (shared)
				Syntax OK

			
			
			
			
			
			
			
		DSO动态共享对象
			支持模块动态装卸载
			
			模块装载目录
				/usr/lib64/httpd/modules/

			配置指令实现模块加载
				LoadModule <mod_name> <mod_path>
				模块路径可使用相对路径(地址)
				相对于ServerRoot指定的路径而言(/etc/httpd)
				/etc/httpd/modules这是一个软连接,连接到/usr/lib64/httpd/modules/
			
			装载模块的配置文件
				/etc/httpd/conf/httpd.conf
				如果要注释掉指定的模块只需要把模块LoadModule前面加上#号注释小即可比如
					#LoadModule auth_basic_module modules/mod_auth_basic.so
					默认是启用的
			
					禁用掉的模块想启用只需要把前面的#号注释掉就启用了
		
		
		定义网站根路径
			DocumentRoot指向的丼为URL路径的起始位置
			如:www.9527edu.org/ = DocumentRoot /var/www/html
			默认网站根路径目录是在/var/www/html/下
			修改默认网站根目录
				单独创建一个目录做网站目录
					mkdir -p /html/www/
					
				修改网站目录
					vim /etc/httpd/con/httpd.conf
					原
					DocumentRoot "/var/www/html"
					改后
					DocumentRoot "/html/www
					保存退出
					
				重启apache
					service httpd restart
					
				添加一个测试的页面到新的目录里面
					echo "now test web index" > /html/www/index.html

						
				利用curl命令测试访问
					# curl 10.0.1.1
					返回结果:
					now test web index
					
		站点访问控制机制
			可基于两种类型的路径指定对那些资源进行控制
				文件系统路径:
					<Directory ""> </Direcotry> 单个目录
					<File ""> </File>	单个文件	
					<FileMatch ""> </FileMatch> 正则表达式(尽量不使用正则表达式,效率低)
			
				URL路径:
					<location ""> </location>
			访问控制机制:
				基于来源地址:
					
				基于用户账号密码:
			
			
		Direcotry中基于来源地址实现访问控制
			Options选项,根据用户访问控制的选项或机制
				所有可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
				
				Indexes索引:
					如果启用这个选项,你所在目录如果没有默认的索引页面,它会把你的网站下所有内容展示出来
					实例:
					启用状态,
					<Directory "/html/www">

						Options Indexes FollowSymLinks
					
						Order allow,deny
						Allow from all
					
					</Directory>
					禁用状态在Indexes前面加上-(减号)
					<Directory "/html/www">

						Options -Indexes FollowSymLinks
					
						AllowOverride None
					
						Order allow,deny
						Allow from all
					
					</Directory>
					
					
				FollowSymLinks
					符号连接访问(软连接)
					允许跟踪符号软连接到的连接文件
					启用状态
					<Directory "/html/www">
					
						Options -Indexes FollowSymLinks
					
						AllowOverride None
						
						Order allow,deny
						Allow from all
					
					</Directory>
					
					禁用状态
					<Directory "/html/www">
					
						Options None
					
						Order allow,deny
						Allow from all
					
					</Directory>
					
				SymLinksifOwnerMatch
					允许追踪,属主匹配的时候允许追踪原文件和符号连接的属主匹配的时候,否则就不允许
					
					
				ExecCGI	
					
				
				MultiViews
					根据浏览器语言或者指定的选项去做匹配一般不启用,性能差
					
				
				下面语句块解释:
				基于来源地址的访问控制机制
				<Directory "/html/www">
				
					Options Indexes FollowSymLinks
				
					AllowOverride None
				
                	Order allow,deny
                	Allow from all
                
				</Directory>
				解释:
					Order 
						检查次序
						Order allow,deny,只有你允许的才允许,需要做白名单
						Order deny,deny,默认的都允许,只有deny的才deny,也就是做黑名单处理
					
					allow
						
					
					deny
					
					ip:限制
					NetAddr:
						10.0.
						10.0.0.0
						10.0.0.0/16
						10.0.0.0/255.255.0.0
				
					实例:
						拒绝10.0.1主机访问,允许10.0.0.0/24网段内的主机访问
						vim /etc/httpd/con/httpd.conf
						修改
						<Directory "/html/www">
						
							Options Indexes FollowSymLinks
				        
				        	AllowOverride None
				        
				        	Order allow,deny
							Deny from 10.0.0.1
				        	Allow from 10.0.0.0/24
				        
				        </Directory>
						保存退出
						重启服务以后10.0.0.1这台主机就无法访问了,但是其他主机照样可以访问
						重启服务	
							service httpd restart
						
		日志设定:
			错误日志路径
				ErrorLog logs/error_log
					真实路径L:/etc/httpd/logs/error_log
				
			日志级别:
				默认是warn
					LogLevel warn
				
				级别如下
					debug, info, notice, warn, error, crit,alert, emerg

				
			访问日志:
				CustomLog logs/access_log combined
				解释:	
					combined
						日志格式
				
				定义日志格式
					LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
					解释:
						%h
							客户端访问者的IP地址
				
						%l
							访问者用户名一般为空(不重要)
						
						
						%u
							用户认证时的用户名,(一般为空)需要输入用户名和密码的
							
						%t
							服务器收到请求时的时间,提供服务的时间
							
						\"%r\
							请求报文的首行信息(请求时的方法,请求时的URL,请求时的协议版本)
							
						%>s
							记录访问请求时的状态码如200,302,302,404,403,500等
							
						%b
							相应报文的主体部分大小,单位是字节不包含相应报文首部
							
						\"%{Referer}i\"{%{Foobar}i}
							请求报文当中"referer"首部的值,当前资源的访问入口,从自于哪个超链接请求跳转而来
							
						\"%{User-Agent}i\"
							请求报文中的头部信息,也就是客户端的浏览器信息
							即发出请求用到的应用程序,	
				详细的一段访问日志记录
				10.0.0.1 - - [23/Oct/2021:19:11:27 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36"
				
				
		路径别名:
			21:00分
				
				
				
				
				
				
				
				
					
		定义默认主页面可以要多个,自左而右生效
			DirectoryIndex index.html index.html.var

			
	Centos7:httpd2.4
		安装httpd
			yum install httpd -y
		
		查看安装的httpd的软件包
			# rpm -qa httpd
			返回结果:
			httpd-2.4.6-97.el7.centos.1.x86_64
			
		查看安装的httpd的配置文件
			# rpm -qc httpd
			返回结果:
			/etc/httpd/conf.d/autoindex.conf
			/etc/httpd/conf.d/userdir.conf
			/etc/httpd/conf.d/welcome.conf
			/etc/httpd/conf.modules.d/00-base.conf
			/etc/httpd/conf.modules.d/00-dav.conf
			/etc/httpd/conf.modules.d/00-lua.conf
			/etc/httpd/conf.modules.d/00-mpm.conf
			/etc/httpd/conf.modules.d/00-proxy.conf
			/etc/httpd/conf.modules.d/00-systemd.conf
			/etc/httpd/conf.modules.d/01-cgi.conf
			/etc/httpd/conf/httpd.conf
			/etc/httpd/conf/magic
			/etc/logrotate.d/httpd
			/etc/sysconfig/htcacheclean
			/etc/sysconfig/httpd
			
			解释:
				
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
		


本文 暂无 评论

Top