在说http之前我们要先了解一些网络相关的与httpd服务相关的信息

套接字:两类ip:port

   ip.port

传输层协议:面向连接tcp

   无连接udp

套接字类型:tcp套接字,udp套接字,raw套接字(应用层自身的原始套接字,这就是扩过相关的ip协议栈,内核与服务直接完成的)

数据链路层是设备驱动程序与相关硬件


C/S clint and  server    server必须要监听在套接字,server主机上的内核是看门人员,然后根据端口这个来判断是哪个应用程序的,然后转给这个服务

通信子网:通用的,只负责传输,交给传世协议

应用层协议:特定的软件来实现,比如http https smtp  pop imap  ftp ldap(用于轻量级目录数据通信)


CIP:CPORT   SIP:SPORT  这是两对信息,来源套接字,目的套接字


http:hypertext transport protocol 超文本传输协议,即有超链接的语言,用html语言来做超链接,

html: hypertext mark language 超文本标记语言

客户端:Browser 浏览器  GUI:纯文本命令的浏览器elinks   ; CLI:一般的界面的浏览器

server端:http server


html的格式:

<html>

<head>

<tittle></tittle>

</head>

<body>

<h1></h1>   一级标题

<p></p>

<h2></h2>   二级标题,,,可以有六级标题

<p></p>

</body>

</html>


页面转接,条用别的页面,点击这个字符串即会出来

<p> <a href="a.html">abc</a> </p>  点击abc即会转接到a.html页面


CSS:cascading style sheet 用来定义字体格式,左边距,大小等


动态网页:之所开发的网页不仅有html,还有程序脚本,这个脚本要执行一下才能实现,这个程序脚本可以在客户端,叫做 客户端程序

服务器程序脚本php,用来实现一些业务处理,从客户端读程序,输出到信息保存到页面,返回给用户客户端,服务器脚本还可以用asp.net jsp php c c++ perl pyghon  

服务器端:CGI,common gateway INterface  通用路由协议


一个页面中会出现包含多个页面对象,一个页面要向服务发送多次请求,那么如何标记众多的页面对象?

URI:标记互联网上的资源的唯一性,uniform resource identifier统一资源标识符,不是web,ftp,tftp的任何一种协议

URL:uniform resource location 统一资源定位符(url只实现了URI的一部分)

http://www.zou.com:80/p_w_picpaths/logo.gif

方案协议,主机名 位置  资源路径


http的版本,http0.9版本,只可以传输文本信息,1991年版本

MIME,base64,将二进制数码变成文本发送,并能够让接收方还原成图片原来的格式

  http 1.0支持多媒体数据处理,keep-alive保持连接,就是客户端请求之后,三次握手之后,不是马上断开,而是在一定时间内保持连接,让这个进程一直服务这个连接,然后在四次断开,,这里的keep-alive也算是缓存功能了

  http1.1版本,目前主流的为1.0,1.1,支持更多的请求方法,请精细的缓存控制机制,持久连接


http报文:

http事务,一次请求与其对应的相应

http资源的操作方法:get,put,head有没有页面  ,post提交表单 ,delete删除页面

http请求:http报文请求,格式是

<method><request-URL><version>

<headers>

首部:name:value定义请求属性

content-type:p_w_picpaths/gif

http相应报文:response

首部:name:value

content-type:p_w_picpaths/gif

分为三类:通用首部,请求首部,相应首部

http响应报文:<version><status><reason-phrase>

<headers>

<entity-body>响应内容

相关规则:

<method>请求的方法,希望服务端执行的动作,如get,head。post等

<request-url>请求的资源,可以是相对路径,也可是完整的url

<version>协议版本,格式http/<major><minor>,如http/1.0  1是朱版本,0是此版本

<header>http首部

<status>状态码

<reason-phrase>原因短语,数字状态码易读信息

<entity-body>主体部分


#####################################################################################


http协议:是一种无状态协议,一次http事务完成之后,连接及时断开,直接后果是服务器无从知道两次请求是同一个人,这就来问题了,那如何让这种连接变的效率高呢,就有两种方法了:

并行请求

持久连接


http的请求方法:

get,head,post,delete,options,tarce,扩展方法有:lock,mkcol,copy,move

GET:请求获取一个资源,需要服务发送

HEAD:根get相似,但其不需要服务发送资源而是仅传送回应相应首部

POST:支持html表单提交,表单中有用户填入的数据,这些数据会发送到服务端,由服务器存储至某文件或数据库中的表

PUT:向服务器存入文档,常用语发布系统网页

DELETE:删除页面资源,删除url指向的资源

OPTIONs:探测服务器端对某资源所支持的请求方法

TEACE:跟踪资源请求要经过的放过请代理和网关等


http状态码:

1XX:信息性状态码,几乎没有用

2XX:成功状态码,

200请求没有问题

3XX:重定向状态码:

301moved permanetly永久重定向   ,下次再访问某资源时根据重定向找别的网页,而不是再来这个网页

302found,临时重定向url指定临时资源位置,这次找了别的网页,但是下次你还要找这个网页,

304not modified 告诉客户端没有修改资源,使用的是缓存用户表示第二次请求时,条件或请求中使用

4XX:客户端类的错误

403forbidden,请求被服务器拒绝

404not found服务其无法找到请求的url

405method not allow 请求的方法不被允许,不允许此方法请求

5XX:服务器类的错误

500服务器内部错误,internal server error,语法有误,权限、配置等有问题

502bad gateway网关有问题,代理服务器从上游收到一条伪响应

503serverce unavalilable 服务器此时无法提供服务,但将来可能使用


http首部:

通用首部

请求首部

响应首部

实体首部:用于对实体指定属性

扩展首部:非标准的首部,可能有程序开发者创建的,如x-forward-for


通用首部:

connection定义c/s之间请求与响应的有关选项,对于http/1.0,connection:keep-alive持久连接

via:显示报文经过的中间节点

cache-control:缓存指示(缓存控制)用于htttp/1.1

pragma:通用首部,也是用于http/1.0

请求首部:

client-ip:

host:请求的主机和端口号,在基于虚拟主机环境中用于表示不同的虚拟主机

referer:用于指明包含当前请求的URL的文档,当前资源文档

user-agent:用户代理,使用什么工具发出请求,即使用神魔样的浏览器

accept首部:用户标识客户端自己更倾向于接受那种方式,要不要使用压缩,字符集,属性等

accept:指明服务请能够发送的的媒体类型

accept-charset支持使用的字符集

accept-encoding支持使用得编码

accept-laguage支持使用的语言

条件请求的首部:

expect:客户端告诉服务器自己期望的行为

if-modified-since从这个时间王秀修改过吗?如果修改过,发新的状态码为200,如果没有修改过则告诉我修改即可,这是发状态码304

if-none-natch与扩展标签有关

跟安全相关的请求首部:

authorization:客户端提交给服务器的认证数据,如账号和密码

cookie:客户端发送给服务器的身份标识

cookie2

响应首部:

age:持续的时间

server:服务器向客户端表示服务器的名称版本

协商首部:

accept-ranges:对当前资源来讲,服务器的接受范围

vary:服务器跟踪客户端的几种变化形式,挑一个作为连接(首部列表)

跟安装相关的相应首部:

set-cookie:客户端拿这以前的与服务器请求发送的令牌,以方便安全连接

set-cookie2:第二版令牌

www-authentication:质询,要求客户端提供账号和密码

实体首部:

location:资源的新位置

allow:允许对比资源使用的请求方法

内容首部:表明内容

content-enconding 告知编码格式

content-languge告知yuyan

content-length内容长度

content-location 资源所在位置,用于重定向

content-range 不常见

content-type 内容类型

缓存首部:

Etag:实体标签

Expires 过期期限

Last-modified 最近一次修改时间


一次访问web的基本过程:

建立连接,接受请求,处理请求,访问资源,构建报文响应,发送响应,记录日志   这7个步骤



web服务器输入输出结构

单线程IO

多线程IO

复用IO,单个线程响应多个请求,但是节约资源

复用多线程IO,多线程,每个线程响应多个请求,



日志写入缓存:把多次请求合体打包交给日志文件当中



httpd:高度模块化:

core+modules  高度可定制,也就是需要你编译安装了

DSO:动态模块共享对象,dynamic shared object

MPM:multopath proccessing module 多道处理模块,不是一个模块,而是一种特殊的称谓



task_struct:任务结构,每个进程都会有,生成一个子进程要有task_struct人物结构,这是在内核中的开销,要分配,生成内存

prefork:域,一个进程一个请求,要定义最大空间和最小空闲数,最多可涌进1024个进程

select():1024


worker:一个线程一个请求,但是一个进程多个线程,融合了多线程和复用结构,但是每个线程有一个请求

线程和进程是会争夺资源的,一个进程所生成的进程数是有限的,线程之间调度要切换


event:单线程响应多个请求

event-driven:时间驱动,主要目的是失眠单线程相应多个请求


#####################################################################################################


httpd,的版本,1.3  2.0   2.2   2.4    又叫apache

官网: httpd.apache.org


httpd的功能特性:

路径别名:alias

用户认证:quthentication

虚拟主机:virtual host

负载均衡

反向代理

用户站点

原生支持CGI(用用网络接口,common gateway interface)




linux默认是安装了httpd的,rpm -ql httpd ,查看服务安装所生成的各项文件

/etc/httpd/conf/httpd.conf  主配置文件

/etc/httpd/conf.d配置文件目录

/etc/httpd/logs连接文件为/var/log/httpd

/etc/httpd/modules/链接文件为/usr/lib64/httpd/modules下的以。so结尾的模块

/usr/sbin/httpd/可执行文件

/var/www/htmldocuroot页面文件存范位置,安装时生成的映射文件,这是网页根目录

/etc/rc.d/init.d/httpd    服务脚本

/etc/sysconfig/httpd   服务配置脚本

/etc/httpd          运行目录


日志滚动:对日志进行切割,access.log就会生成access1.log,然后在生成access.log,增量备份相似



#######################################################################################################


配置文件实现不同的功能,vim /etc/httpd/conf/httpd.conf  记得做好备份再修改配置文件


配置指令不区分大小写,而值可能需要注意大小写,尤其是路径

格式: 配置参数  值


配置文件语法检测可以使用

httpd -t  

service httpd configtest


绝大多数配置文件修改之后可以通过service httpd reload来生效,但是如果修改了其中的ip或者端口这要通过restart来启动了




****************     1.监听套接字    ***************************


listen [ip:]port,这个指令可以出现多次,就是可以写多个ip与端口,一般是基于多端口是,要以这个端口监听为前提

listen 80

listen 8080



***************     2.keepalive支持持久监听连接    ****************


一旦开启,单开就要有超时,保持最大请求数的相应设置

KeepAlive  on|off    开启或关闭

KeepAlive Timeout 2   超过时间为2s,这已经是不小的数字了

MaxkeepAliveRequest 50   这里的数字要根据自己的网站进行调整,然后在进行测试,知道何时为止


之后可以通过telnet 本机ip 空格 端口80,查看网站

GET /zou.html http/1.1

HOST:192.168.200.7

这是会出现空格,你要再按一次回车,就能看到自己的网站了,当然你要实现编辑好zou.html



***************    3.MPM多道处理模块    **********************


httpd -l 支持的模块列表

httpd.work -l 显示work列表


在centos上,想使用httpd.work模型,修改/etc/sysconfig/httpd

注释掉HTTPD=/usr/sbin/httpd.worker

在主配置文件中

<Ifmodule prefork.c>判断这个模块是否存在,所有设定在容器内的参数有效

startServers    默认启动的工作进程数

MinSpareService 最小空闲进程数

MaxSpareService 最大空闲进程数

ServerLimit最大活动进程数

MaxClients最大并发连接数

MaxRequestPerChild一个子进程最大所允许能够服务的请求数



<IfModule worker.c>     生成多个进程,每个进程多线程,一个线程回应一个请求

StartServer启动子进程的个数

MaxClient发送请求的最大数

MinSpareThreads 最小空闲的进程数

MaxSpareThreads最大空闲的进程数

ThreadsPerChild每个子进程可生成的线程数

MaxrequestsPerChild 每个子进程所能够在生命周期内所能够服务的请求个数


***************    4.DSO模块的加载方式      *******************************

httpd -M列出已经装载的所有DSO与非DSO模块,其中非DSO显示为static,DSO显示为shared

httpd -l列出支持使用的非DSO模块

LoadMOdule module_name /path/to/file 绝对路径,也可以写相对路径,但是这个相对路径是在网络根目录而言的

例如:

Loadmodule php5_module /usr/lib64/httpd/modules/php5.so  

之后让httpd  reload重新加载即可生效



********************     5.DocumentRoot 配置站点根目录,就是网页存放位置根目录,与/不同   *************


DocumentRoot "/path/to/somewhere"

<Directoty "/path/to/somewhere/">  这两个文件目录要保持一致,这样设置才有效



***********************      6.页面访问属性     ***************************


<Directory "/path/to/somewhere">

options

AllowOverride

</Directory>

网页属性就是这个option设定,这里说一下option相关:

Indexex:缺少默认页面时,允许将站点路径目录中的所有文件以文件列表的形式显示出来,这样做是很不安全的,除非这是一个下载站点,不然别人访问你的网页,会看到你网页目录下的所有东西,有可能可以胡作非为,应该禁止

FollowSymLinks:是否允许跟随符号连接所指向的文件,也急就是你开启这个功能,页面可以跳转,但是如果你要是光比的画面你页面是只能打开这一个,你想点击个超连接,是不能实现的

None 所有都不启用

All都启用

ExecCGI:允许使用mo_cgi模块实现服务器端包含SSI

Multiviews内容协商不同语言,允许使用mod_negotiation实现内容协商

SymlinksIfownerMatch在连接文件里属主数组与原始文件相同时,允许跟随符号连接所指向的源文件



****************************  7.基于主机(ip)的访问协议   ***************************


<Directory "/path/to/somewhere">

options

ALlowOverride    底下的三个是否被禁用,如果写成none,则下面三个不被禁用,其后面可以跟随的值有 options FileInfo AuthConfig Limit All None 6个值

Order

Allow

Deny

基于ip的访问控制

order次序   ,allow,deny都没有或都设定时,拿在order后面的allow和deny谁在后面谁生效;如果只设置一个那就设置的那个生效,与order次序就没有多大关系了


这里如果是allow的话,可以是是allow form all 或者是一个网段,一个ip均可

网段的写法如下:

172.168

172.168.0.0

172.168.0.0/24

172.168.0.0/255.255.255.0



**************************  8.定义默认主页,就是你在浏览器上自动出现的那个    ************************


DirectoryIndex index.php index.html home.html default.html  浏览器会安装这个出现顺序依次查找,知道找到你所这顶的网页为止,如果没有,那就是会报错的



****************************  9.用户目录   ****************************************


用户事后可以家目录下创建自己的站点?如果可以的话,可以创造个人站点,以用户家目录为基础,就是每个用户在自己家目录下创建一个网页文件,可以通过网页来实现

http://server_ip/~Username/    这个是用户家目录网页查看的格式,不要忽略 ~


userdir disabled 禁止

public.html 直接跟目录,这根目录为用户家目录下的目录名称,所有位于家目录下的网页文件需要赋予运httpd进程的用户拥有执行权限:

setfacl -m u:apache:x /home/zou

getfacl /home/zou

ls -l public.html  查看一下文件时候有权限



***************************  10.配置日志功能     ****************************************


/var/log/httpd/   access.log  访问日志,其中需要记录的内容需要自定义

 error.log   错误日志,这个不需要自定义

access.log定义访问日志的指令:

Customlog "/path/to/access.log-file"  LogFormat_Name  这里最后也就是定义一个宏,和定义变量相似,然后在引用这个定义好了的LogFormat_name即可


%h客户端地址

%l远程登录名,一般为横线,-

%u认证所使用的用户名,通常为 -

%t接受的请求时间,(日月年,时分秒,时区)

\转义

%r请求报文的起始行

%>s请求响应时的状态码

%b相应报文字节数,不包含http首部,为相应报文的长度单位字节

%{Foobar}i记录指定请求的报文首部内容value,这个{}是header_Name可以自定义,空为-,直接访问的,并没有从上一个网页跳转过来


例:默认的设置是这样的

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i" \"%{user-Agent}i\"" combined

后面还有一行调用了这个combined



**************************   11.路径别名    *********************************************


Alias /alias/ "/path/to/somewhere/"   意味着访问http://server_ip/alias时,就会来到/path/to/somewhere这个页面位置,甚至这个页面位置可以不再网页根目录环境下

但是这个语法需要注意的是前后两个要么都有/要么都没有



************************   12。设定默认的字符集     ***************************************


AddDefaultCharset  UTF-8



***********************   13.CGI脚本路径别名   ***************************************


http是靠文件后缀来识别文件的,http不能识别以.sh结尾的文件,如果想要让用户在浏览器上看到脚本服务器上脚本执行后返回的结果,则需要httpd与shell能够交融合作,这就要基于CGI协议了,通用网关接口协议,


ScriptAlias /cgi-bin "/var/www/cgi-bin/"   此目录下的所有文件都应该有SUID或者SGID能够访问即可,这里是系统默认的配置


编辑网页脚本问件:vim /var/www/cgi-bin/test

#!/bin/bash

cat << EOF

Content-Type:text/html

<pre>

The hostname is : `hostname`

The time is `date`

</pre>

EOF


本机ip/cgi-bin/test查看网页是否有效



*********************   14。基于用户的访问控制,每个用户登录网页需要用户和密码    ************************


用户和密码是存放在/etc/httpd/conf/.htpasswd,当然也可以存放在sql数据库,dbm机制,ldap中,最好不要放到passwd文件下


在主配文件中的LoadModule开头部分有一块定义认证的auth开头的指令,可分为三类:

auth 开头的认证类型,basic 基本认证,账号,密码明文发送,不安装,但是最常用

   digest 摘要认证,hash编码发送,这种机制较为安全,但是很多浏览器不支持这项功能

quthn开头的文件,认证提供者, authentication provider

账号和密码的存在位置

quthz开头的是授权机制,authorization

根据什么进行授权,哪些组,用户可以访问


案例:基于文件,做基本认证,根据用户合组进行授权

修改主配置文件,如果让某个网站目录下的文件无法访问,

<Directory "/www/zou/hui">

option None

AllowOverride AuthConfig  明确使用用户认证

AuthType Basic 认证类型,为基本

AuthName "Private Area" 对话框中的相应信息,可以自由定义

AuthUserFile /etc/httpd/conf/.htpasswd  事先你要用这个文件,

Require vaild-user  所有用户都合法,你可以可以使用跟上具体用户tom

</Direcrtoty>

htpasswd -c -m /etc/httpd/conf/.htpasswd tom

htpasswd -m /etc/httpd/conf/.htpasswd jerry  第二次使用这个时不能够加上-c,不然会清空这个文件里的设置,也就是前面加的人都会没了

-c  创建额五年间,创建第一个用户时使用

-m   密码基于MD5编码存储

如果基于组认证可以在添加写上:AuthGroupFile /etc/http/conf/.htpasswd

Require 后跟组名

基于组名的最好把基于用户也一并写上

组文件里  组名: 用户1 用户2 用户3.。。


service httpd reload




*****************    15。 虚拟主机   *********************************


虚拟主机可以单独配置,每个主机之间不受干扰,也可以添加用户认证,访问日志,错误日志,别名,脚本别名服务

它与主机网站只能存在一个,要想设置要关闭主机网站的相应设置,一个物理机提供多个站点就要有一下三种方式:

基于ip

基于port

基于FQDN

<Virtualhost>  虚拟主机容器

ServerName主机名称

serverAlias

ServerAdmin

DocumentRoot "/path/to/file/"

<Directory "">

options

这里有空行

</Directory>

</Virtualhost>


基于ip时:

<Virturalhost IP:port>  有几个写几组,变化ip,端口不变

基于端口时

端口变化

基于主机名

一个ip,端口80.每一部分设置相应的主机名就是修改ServerName后的值

如果是测试的话,要修改host文件,查看结果,本地主机,或是linux上的host文件

192.168.200.5  www.a.com

192.168.200.5  www.b.com

192.168.200.5  www.c.com

编辑好相应的内容可以使用elink本地命令行查看,记得之前重启服务


我们可以去淘宝上godaddy注册域名,然后在淘宝上买个虚拟主机空间,大概100元组件自己的网站做测试



******************  16.https   ******************************


个人账户,信息为敏感信息时,实现网页应用中数据加密的传送,基于ssl tls实现,

ssl  secure socket layer 安全套接字,多使用sslv3版本

tls  transport layer security 安全传送的tlsv1版本,这两个很多时候等同于一个使用


三次握手建立ssl会话连接,选择加密算法,生成对方可以交换的密钥,交换密钥,网站服务器从网站把数据用服务端自己的密钥进行加密,ssl会话生命周期一般和网页声明有效周期一样


最常用的数字证书:x509.3,证书格式:

证书序列号

证书签名算法

证书颁发者 CA自己的信息,CA组织的名称,地址等

有效期

对象的公钥

对象的名称人或者机器名称,持有者的名称

扩展信息包含发布这唯一的id,持有者的id  证书的基本约束,使用策略,密钥的使用限制

CA数字签名


PKI:public key infrastructure 公钥基础设施

端实体:申请者

注册机构

签证机构

证书撤销列表

证书存取库


SSL握手所做的的工作:

交换协议版本号,选择一个双方都知道的密钥,看一下支持的加密方式,对两端进行身份验证,大多数是客户端验证服务器,之后完密钥交换


https事务:建立到服务器端口443的tcp连接,ssl安全参数握手,在ssl上发送http请求,在tcp上发送已加密请求,在ssl上发送http响应,在tcp上发送已加密的相应,ssl通知关闭,tcp断开连接。。。https是二进制格式的协议,监听tcp443端口


ssl安全参数握手

客户端请求证书

服务器发送证书给客户端

客户端验证证书

客户端选择一个临时密钥,对称密钥密码用对方公钥生成密钥发送个服务端

ssl会话不支持在基于FQDN的虚拟主机上实现,如果有3个虚拟机则只能选择一个使用https,因为ssl会话基于ip地址进行的


客户端验证服务器证书时:

日期监测,是否在有效期内

证书颁发者的可信度检测,这一步骤可能需要人为操作

证书的签名检测

持有者的身份检测,在互联网访问时,https://www.zou.com/这个路径名称和服务器证书持有者的名称要保持一致,否则证书不可信



httpd基于mod_ssl模块实现对ssl的支持

这里把CA服务器和web服务器做成一个了,注意

第一步:自建CA或申请证书(说明一下,首先你要自己建立一个CA服务器,然后再为web服务器生成服务器)

cd /etc/pki/CA

(umask 077; openssl genrsa 2048 > private/cakey.pem)  CA服务器自己的密钥,准备给自己做个根证书

vim /etc/pki/tls/openssl

country Name_default = CN

StateOrprovinceName_default = Hebei

LocatityName_default = Baoding

0.organizationName_default = Baiyi

organizationUnitName = Jishu

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3665 -out cacert.pem   这里的cacert.pem就是根证书,理论上和权威证书一个吊样,,,当生成证书时还要问你域名啥的,看着填就行了

第二步:利用这个CA服务器创建一个证书然后给web服务器作为证书使用了,(如果web服务器是另一台机自上,可以先在CA服务器上为web生成一个证书,注意的是在域名时必须要填写web利用的域名,,,然后把这个证书发送给CA服务器签发一下,再让CA把签发好的web证书发送给web服务器,就可以了)

cd /etc/httpd/conf

mkdir ssl

cd ssl/

(umask 077; openssl genrsa 2048 > httpd.key)  web服务器自己生成的私钥

openssl req -new key httpd.key -out httpd.csr   这是web服务器自建的CA,它还需要CA服务器认证一下

在web的证书生成的时候一定要写好自己的域名www.6k6.cc,这里要和下面配置文件里面的一样,不能错


    CA服务器端:

cd /etc/pki/CA

touch index.txt serial crlnumber

echo 01 > serial

    由于CA和web在一个,就不那么麻烦了

cd /etc/httpd/conf/ssl

openssl ca -in httpd.csr -out http.crt -days 365 默认就是一年,http.crt是最后的web证书


第三步: 让httpd支持ssl服务

grep mod_ssl /etc/httpd/conf/httpd.conf

yum -y install mod_ssl 这是一个单独的模块,就会自动生成/etc/httpd/conf.d/ssl.conf

vim /etc/httpd/conf.d/ssl.conf

ServerName www.6k6.cc:443

DocumentRoot "/var/www/html"

SSLcertificatiFile /etc/httpd/conf/ssl/httpd.crt

SSLCerlificateKeyFile /etc/httpd/ssl/httpd.key  这个私钥,客户端验证完服务器的证书,会拿着服务器的公钥加密一个临时会话密钥发给服务器,服务器在用着个私钥来解密


http -t

service httpd restart 修改了端口或者ip,就必须重启服务了,不能是reload


测试:

把根CA服务器的根证书发送给windows,然后改名cacert.crt,之后就是安装上它

修改host 文件,C,windows,system32,drivers,etc,hosts,加入ip www.6k6.cc

打开浏览器https://www.6k6.cc


   不用windows也可以使用linnux的s_client测试:

openssl s_client -connect [host:port] [-Cafile filename]使用哪个根ca证书验证web服务器证书是否有效

vim /etc/hosts  写入ip QDNS

openssl s_client -connect www.zou.com:443 -CAfile /etc/pki/CA/cacert.pem  这个证书时服务器当做客户端自测的,如果要是使用真正的客户端,要把这个证书给以移动过来,然后使用

GET /index.html http/1.1

HOST:www.zou.com



********************   17.服务器status页面  *************************


内生的status信息,且此信息可以通过通用接口web页面予以显示

<Directory [~] "">   限定文件系统目录访问路径

</Direcory>


<Locaton "">限定URL配置访问属性

</Location>

<File "">限定单个文件

</File>

<LocationMatch "">      明确说明使用的正则表达式,不用加[~],  前面个的三个可以加[~]用正则,不加不支持正则

</LocationMatch "">

如果要配置其属性的URL能映射到其具体文件系统领,建议使用<Directory>,而非<localtion>,像status页面在文件系统上根本没有界面,则只能使用<Location>


处理器:当文件系统被调用时,apache的内部表现形式,一般每种文件类型都有其隐藏式处理器,通常文件都会被apache简单处理(内生status页面信息就要明确处理特定处理器,status_modle(shared)可以用  http -M 显示该模块

显示的定义使用处理器setHandler


在httpd主配置文件里

<Location /server-status>

SetHandler server-status

AuthType Basic

AuthName "Server-stauts"

AuthUserFile "/etc/httpd/conf/.htpasswd"

Require vaild-user     使用上个文件里的所有用户

Order deny,allow

Allow from all


访问https://www.zou.com/server-status  就会出现关于httpd的相关信息,这是一个状态信息,所以不能让所有人看到,因此上面做了访问设置,用的是基于用户的,也可基于ip



*******************   18. 压缩机制  *****************************


使用mod_deflate模块压缩页面优化传输速度,可以写为一行,也可以写多行,默认为gzip

启动过滤器,选择一种压缩方式,定义压缩比


httpd -L | grep deflate  查看模块是否被安装

在主配文件里

<IfModule mod_deflate.c>

AddOutput FilterByType DEFLATE text/plain输出过滤器跟类型,只有text/plain类型就压缩,可以每个一行的写,也可以是一行,每个以空格隔开的写

BrowserMatch开头的部分,这里定义的是浏览器支持的匹配

SetOutputFilter DEFLATE 启用过滤器来完成压缩

vim /usr/local/httpd/conf.d/deflate.conf

SetOutFilter DEFLATE

AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/css

AddOutputFilterByType DEFLATE text/javascript

AddOutputFilterByType DEFLATE text/xml

BrowserMatch ^Mozilla/4 gzip-only-text/html   明确指定哪些web不能匹配

BrowserMatch ^Mozilla/4.1.0[678] no-gzip

BrowserMatch \bMSI[E] !no-qzip !zip-only-text/html

# Level of compression (Highest 9 - Lowest 1)默认为6

DeflateCompressionLevel 9     指定压缩比,9位最高

 

# Netscape 4.x has some problems.

BrowserMatch ^Mozilla/4 gzip-only-text/html

 

# Netscape 4.06-4.08 have some more problems

BrowserMatch ^Mozilla/4\.0[678] no-gzip

 

# MSIE masquerades as Netscape, but it is fine

BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html








#############################################################################################

curl命令


curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。


curl的常用选项:


    -A/--user-agent <string> 设置用户代理发送给服务器,即告诉服务器浏览器为什么

    -basic 使用HTTP基本验证

    --tcp-nodelay 使用TCP_NODELAY选项

    -e/--referer <URL> 来源网址,跳转过来的网址

    --cacert <file> 指定CA证书 (SSL)

    --compressed 要求返回是压缩的形势,如果文件本身为一个压缩文件,则可以下载至本地

    -H/--header <line>自定义头信息传递给服务器

    -I/--head 只显示响应报文首部信息

    --limit-rate <rate> 设置传输速度

    -u/--user <user[:password]>设置服务器的用户和密码

    -0/--http1.0 使用HTTP 1.0


curl -I http://www.zou.com   使用head请求访问,之获取对方的相应首部,比方说代理服务器配置是可以他测到自定义的首部

curl -A testagent  http://www.zou.com

curl -e http://www.google.com.hk/index.html http://www.zou.com   通过那个网页跳转的

curl --cacert /etc/pki/CA/cacert.pem https://www.zou.com  按照指定的根证书访问网页




资源限定ulimit


-n显示或限定能开的最大的文件句柄数,后面可接数字,只是软限制,可以超出,但只能超出指定的时间,超出市场机会清理,(而应限制则据对不会超出限制的数)

-u 所能打开的最大进程数,不指定数字则显示当前的限制进程的数量

配置文件:

/etc/security/;limit.conf

扩展的配置文件:

/etc/security/limits.d/*.conf

修改主配文件:

apache hardnofile65535

apchehardnproc30000

用户硬限制最大进程数

该修改不会立即生效,需要重启系统

但是可以临时修改ulimit -n 65535 ulimit -u 30000暂时修改生效




ab 工具使用


-c concurrency 总并发

-n requests总请求,这连个选项后面都跟数字

一般-c的只要小于-n的值,

ab -c 1000 -n 5000 http://www.zou.com/1.html

ab模块是模拟网站压力测试的,此外这方面的服务还有http_load,webbench ,seige都可以做http压力测试:模拟测试但是bujingque

tcp_copy能够扶植真是的流量,扶植数10G流量做精确测试