Day19-apache
HTTPD(俗称apache)
简介:目前来说,Linuxweb服务器主要用apache与nginx。
1.web服务器的输入/输出结构:
单线程I/O结构
多线程I/O结构
复用的I/O结构,单个线程相应多个请求。
复用的多线程I/O结构:多个线程,每个线程相应多个请求
2.apache组成:core(核心)+modules(模块)。http是高度模块化的。由核心与跟多模块组成,你可以装在模块,也可以设置让着这个 模块是否启用
3.多道处理模块,针对于上面的服务器结构有不同模块。(非一个模块,而是针对下面模块的统称。)
(1)prefork:一个进程一个请求。一个线程一个请求。
工作模式:进来一个请求,创建一个进程,同时维护一部分进程为常用进程。可以设置最小空闲进程数目(节约时间),设置最大进程数(防止太多请求处理不过来,卡死。)
特性:这种模式是基于I/O模型为select(事件分离器)来工作的,这个文件描述符最大只能1024个。所有这种模式最多1024个。
实现web模式:多线程I/O结构
(2)worker:一个进程,多个线程。一个线程,一个请求。
工作模式:一个进程多个线程,但是一个线程还是只能处理一个请求,性能上与prefork差不多。
实现web模式:多线程I/O结构
(3)event:单线程,相应多个请求。而且基于事件驱动。
event-driven(事件驱动):主要目的在于实现单线程,响应多个请求。
实现web模式:复用的多线程I/O结构。
httpd的功能特性:
1.alias(路径别名)
2.authentication(用户认证)
3.virtual host(虚拟主机)
4.反向代理
负载均衡
5.用户站点
6.CGI(通用网络接口)
httpd安装及目录:
yum安装:#yum -y install httpd
服务脚本:/etc/rc.d/init.d/httpd
运行目录:/etc/httpd
配置文件:
主配置文件:/etc/httpd/conf/httpd.conf
扩展配置文件:/etc/httpd/conf.d/*.conf
socket:80/tcp 443/tcp
站点根目录:/var/www/html
CGI目录:/var/www/cgi-bin
日志切割:/etc/logritate.d/httpd
配置文件:
/etc/httpd/conf/http.cof
解析:配置参数 值
1.配置指令不区分字符大小写
2.值有可能区分大小写
3.有的指令可以出现多次
配置文件格式:
1.全局配置
2.主机配置:用于仅提供一个站点时
3.虚拟主机:用于提供多个站点时,不能与主机配置同时出现。
配置文件测试语法:service httpd configtest /httpd -t
常见配置段:
1.httpd 工作进程目录
sever root ServerRoot "/etc/httpd"
2.Listen [IP:]port
例如:Listen 80
Listeen 192.168.247.111:8080

3.配置使用keep alive(长连接)
KeepAlive {on|off} 开启|关闭长连接
keepalivetimeout 2 长连接超时时间
maxkeepaliverequests 50 最大长连接时间

4.MPM(多道处理模块)
1.查看支持的模块:#httpd -l

2.模块设置特性):
prefork :
<IfModule prefork.c>#:容器标签
StartServers 8#默认启动的工作进程数
MinSpareServers 5#最小空闲进程数
MaxSpareServers 20#最大空闲进程数
ServerLimit 256#最大活动进程
MaxClients 256#并发请求最大数
MaxRequestsPerChild 4000#每个子进程在生命周期内所能服务的最多请求个数
</IfModule>
worker:worker模型是由root启动一个主进程,然后可以启动多个子进程,子进程有可以启动多个线程,一个线程只能处理一个请求。
<IfModule worker.c>
StartServers 4#启动的子进程个数
MaxClients 300#并发请求的最大数
MinSpareThreads 25#最小空闲线程数
MaxSpareThreads 75#最大空闲线程数
ThreadsPerChild 25#每个子进程可以生成的线程数
MaxRequestsPerChild 0#每个子进程在生命周期内所能服务的最大请求数(0表示不足限定)
</IfModule>
3.配置使用模块:系统默认使用httpd模块,如果要用其他模块需要更改配置:/etc/sysconfig/httpd.
5.DSO(动态记载模块)
格式:LoadModule 模块名称 模块路径

查看已装载的模块。#httpd -M

6.设置站点根目录
DocumentRoot /path/

7.配置页面访问属性
<Directory />
Options:
Indexes:缺少页面时,允许将目录及所有文件列出
FollowSymLinks:允许跟随符号链接所指向的原始文件
None:全部禁用
All:全部启用
ExecCGI:允许使用mod_cgi模块指向CGI脚本
Includes:允许使用mod_include模块实现服务器包含(SSI)
MultiViews:允许使用mod-negotiation实现内容协商
SyLinksIFOwnerMatch:链接文件属主属组与原始文件属主属组相同时,允许连接符号所指向的原始文件
</Directory>
<Directory>
Options
AllowOverride None (None表示下面的规则生效)
Order Allow,Deny(次序是先看Allow规则,在看Deny规则)
Allow(允许的IP)
Deny(拒绝的IP)
</Directory>
8.定义默认主页面
DirectoryIndex index.html index.php home.html
9.用户目录
UserDir disablied:一般禁止
10.配置日志功能
/var/log/httpd
access.log:访问日志
error.log:错误日志
访问日志:
CustomLog "文件位置" 别名
LogFormat 格式定义字符串 别名
%h:客户端地址
%l:远程登录名,通常为-
%u:认证时的远程用户名,没有认证时为-
%t:收到请求的时间
%r:请求报文的起始行
%>s:相应状态码
%b:相应报文长度,单位为字节
%{Header_Name}i:记录指定请求报文首部的内容(value)
错误日志:
ErrorLog
11.路径别名:
格式:Alias 一个url 一个文档目录(当访问某个url的时候就是访问这个文档目录中的内容)
www/alias/ "/path"
注意:这里代表的是,当访问www/alias的时候,alias里面的内容来自,/path里面
12.设定默认字符集
AddDefaultCharset UTF-8
13.CGI脚本路径别名。
什么是CGI:Common gateway Interface (通用网关接口,就是当web服务器需要返回的内容需要执行的时候,就调用CGI执行后返回)
ScriptAlias /url /phth
这里,当用户访问这个url的时候,相对应的目录(path)中的所有文件都能够通过CGI协议,执行后返回给用户。

注意:这里系统是有默认url跟path的,一般不要更改
14.基于用户的访问控制
虚拟用户:这里访问文档的时候需要输入用户密码,但是不是服务器的用户名和密码,而仅仅是为了获取某个特定资源的认证虚拟用户。
用户密码文件放置位置:①/etc/httpd/conf/.htpasswd
注意:这里默认是没有这个文件的,但是创建这个密码文件可以通过htpasswd命令来创建。
命令格式:htpasswd 【参数】
-c:创建密码文件
-m:使用MD5把密码加密后存放
-b:批量创建
-D:删掉某些用户
实例:创建密码文件及zrq用户

注意:第一次创建用户的时候,由于没有密码文件,所有要加-c选项 创建密码文件。
②放置在SQL中
认证类型(auth):
basic:基本认证,账号密码明文发送。
digest:摘要认证,hash编码后发送认证。
认证提供者(authentication provider):账号密码保存的位置。
授权机制(authorization):根据什么进行认证
案例:基于文件,做基本认证,根据用户和组进行授权.
第一步:更改配置文件:

注意:这里要先保证/var/www/html能够访问。
第二步:创建配置文件及目录:
#htpasswd -c -m username
第三部:如果要基于组认证
1.把AuthUserFile 后加一行,AuthGroupFile
2.并把Require group Groupname
3.创建组文件:
组名:用户1 用户2 用户3
15.虚拟主机
解析:一个物理服务器提供多个站点服务(注意:只用虚拟主机,要先关掉中心主机,就是注释掉DocumentRoot)
web服务器:Socket(IP,port)
第一种:基于不同的IP实现不同的虚拟主机
变化IP
第二种:基于端口实现不同的虚拟主机
变化port
第三种:基于不同的主机名实现不同虚拟主机
变化SeverName
注意:这里,当用户请求域名的时候要先做dns解析,所以服务器应该在收到请求后通过http首部的host来判断用户请求的是哪个虚拟主机。
<virtualhost IP:port>
SeverName
DocumentRoot ""
<Directory>
Options
</Directory>
SeverAlias
SeverAdmin
</virtualhost>
虚拟主机都可以单独配置各种配置:
用户认证
访问日志
错误日志
别名
脚本别名
Day19-apache的更多相关文章
- Apache执行Python脚本
由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...
- Apache Ignite之集群应用测试
集群发现机制 在Ignite中的集群号称是无中心的,而且支持命令行启动和嵌入应用启动,所以按理说很简单.而且集群有自动发现机制感觉对于懒人开发来说太好了,抱着试一试的心态测试一下吧. 在Apache ...
- Apache Ignite高性能分布式网格框架-初探
Apache Ignite初步认识 今年4月开始倒腾openfire,过程中经历了许多,更学到了许多.特别是在集群方面有了很多的认识,真正开始认识到集群的概念及应用方法. 在openfire中使用的集 ...
- Apache 与 php的环境搭建
Apache和PHP的版本分别为: httpd-2.4.9-win64-VC11.zip php-5.6.9-Win32-VC11-x64.zip 下载地址: php-5.6.9-Win32-VC11 ...
- Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
学习架构探险,从零开始写Java Web框架时,在学习到springAOP时遇到一个异常: "C:\Program Files\Java\jdk1.7.0_40\bin\java" ...
- 【开发软件】 在Mac下配置php开发环境:Apache+php+MySql
本文地址 原文地址 本文提纲: 1. 启动Apache 2. 运行PHP 3. 配置Mysql 4. 使用PHPMyAdmin 5. 附录 有问题请先 看最后的附录 摘要: 系统OS X ...
- Apache Cordova开发Android应用程序——番外篇
很多天之前就安装了visual studio community 2015,今天闲着么事想试一下Apache Cordova,用它来开发跨平台App.在这之前需要配置N多东西,这里找到了一篇MS官方文 ...
- java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE
Android发出HTTP请求时出现了这个错误: java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INST ...
- Ubuntu下配置apache开启https
一.HTTPS简述随着网络的日常,信息安全越来越重要,传统的网站都是http协议明文传输,而HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,比http协议安全. 那ht ...
- 使用apache自带日志分割模块rotatelogs,分割日志
rotatelogs 是 Apache 2.2 中自带的管道日志程序,参数如下(参见:http://lamp.linux.gov.cn/Apache/ApacheMenu/programs/rotat ...
随机推荐
- 网页程序迁移至微信小程序web-view详解
小程序现在越来越流行,但是公司的很多项目都是用网页写的,小程序语法不兼容原生网页,使得旧有项目迁移至小程序代价很高: 小程序之前开放了webview功能,可以说是网页应用的一大福音了,但是微信的web ...
- Yuchuan_Linux_C 编程之十一 进程间通信
一.整体大纲 二.进程间通信概念及方法 Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间.任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换 ...
- 随着php7的发布我个人觉得有必要进行一下历史回顾和整理
先看下人尽皆知的发展历史: HP 继承自一个老的工程,名叫 PHP/FI.PHP/FI 在 1995 年由 Rasmus Lerdorf 创建,最初只是一套简单的 Perl 脚本,用来跟踪访问他主页的 ...
- 实验一 Linux系统与应用准备(嵌入式Linux工程师的“修真之路”)
作业格式 项目 内容 这个作业属于哪个课程 这里是链接[https://edu.cnblogs.com/campus/nchu/2020SpringSystemAndApplication] 这个作业 ...
- Silence主题 美观清爽的cnblog第三方主题
为什么推荐? 才开通cnblog,但苦于官方主题都不是很好看,翻找Github的时候发现了这个项目Silence 这是预览地址 官方展示图片 安装中的坑 不显示公共模块.博文目录.博文签名.博文赞赏. ...
- 阅读GitHub源码的正确打开方式
前言 近来发现阅读开源项目上手就整最新的代码不合适,缺少项目迭代的具体实现过程,想着若是可以看到针对问题的提交代码就好了,所以就有了本篇博客. 以文主要涉及:如何fork开源项目,如何保证本地仓库代码 ...
- (转)SpringBoot :(has no explicit mapping for /error)
转载自:https://www.cnblogs.com/panchanggui/p/9945261.html 异常:This application has no explicit mapping f ...
- JavaScript每日学习日记(0)
8.10.2019 1.JavaScript能改变HTML内容.属性.样式,能隐藏或显示HTML元素. 2.JavaScript函数可以任意数量被放置在<body>.<head> ...
- 矩阵快速幂-QuickPow
矩阵快速幂引入: 1.整数快速幂: 为了引出矩阵的快速幂,以及说明快速幂算法的好处,我们可以先求整数的幂.如果现在要算X^8:则 XXXXXXXX 按照寻常思路,一个一个往上面乘,则乘法运算进行7次. ...
- vue-element框架通过blob进行后端token权限验证下载
在项目中,后端要求下载时要进行后端的权限验证,发现a链接进行直接下载无法满足这个需求,只能通过blob对象来进行下载操作,翻阅大量资料最后实现该功能.以下是我个人的理解,如有不足,请各位大佬多指教 / ...