linux之http详解

HTTP(HyperText Transfer Protocol)超文本传输协议
html(HyperTextMarkLanguage)超文本标记语言
URI(Uniform Resource Indentifier)统一资源标识符:定义全局范围内唯一引用某一个独立的资源的命名方式
统一:路径格式上的统一
URL(Uniform Resource Location)统一资源定位符:用于描述互联网上互联网资源的统一表示格式
是统一资源标识符的子对象
web资源:http://host:port/path/log.gif
多个资源很可能被整合为一个html文档
web对象(和web资源意义相同)
HTTP方法:0.9版本
GET:获取服务器资源到本地浏览器进行显示(不是简单传输的)
1.0版本后
put:
post:通过表单提交数据到服务器上去
delete:
MIME:Mutilpurpose Internet Mail Extetion(多用途互联网邮件扩展)
将非文本数据在传输前重新编码为文本格式,接收方能够用相反的方式将其重新还原会原来的格式,还能够调用相应的程序来打开此文件
base64文本编码格式
动态网页:服务器端存储的文档非HTML格式,而是编程语言开发的脚本,脚本接受参数之后在服务器运行一次,运行完成后会生成HTML文档,把
生成的文档发给客户端
IP首部:
源地址
目的地址
tcp首部:
源端口
目的端口
http首部
定义了基于http协议获取那个资源的
HTTP报文:请求报文、响应报文
请求报文的语法:
<method>(资源获取方法) <request-URL>请求的资源是什么 <version>协议的版本号(0.9还是1.0)
<headers>






























<entity-body>报文主体
响应报文语法:
<version> <status>状态代码  <reason-phrase>
<headers>

<entity-body>

请求报文:
GET / HTTP/1.1
Host:www.mageedu.com
Connection:keep-alive
响应报文:
HTTP/1.1 200 OK
X-Powered-By:PHP/5.2.17
Vary:Accept-Encoding,Cookie,User-Agent
Cache-Control:max-age=3,must-reavlidate
Content-Encoding:gzip
Content-Length:6931









Web服务器的主要操作
1、建立连接-接收或拒绝客户端的请求
2、接收请求-通过网络读取HTTP请求报文
3、处理请求-解析请求文件报文并作出相应的动作
4、访问资源-访问请求报文中的相关资源
5、构建响应-使用正确的首部生成http响应报文
6、发送响应-向客户端发送生成的响应报文
7、记录日志-当已经完成HTTP事物记录进日志






SERVER的响应模型
单进程、单线程
多进程、多线程
单进程、多请求
多进程、多请求



客户端访问服务器中的每一个资源都是单独发送单独请求的

状态代码:
1xx:纯信息
2xx:“成功”类的资源信息
3xx:重定向的信息
4xx:客户端错误类的信息
5xx:服务器错误类的信息
超链接:
Web:
C/S
c:Client Agent(browser,spider)
s:server
流程:Client-->request-->server-->response-->Client
Client:
IE
Firefox
Chrome
Opera
Safari
Server:
APACHE-->httpd
nginx
lighttpd
thttpd(主用于嵌入式)
应用程序服务器(不但能够处理静态内容,还能在自己内部处理某种格式的动态内容)
IIS
Tomcat(apache)
Websphere(IBM,JSP)
Weblogic(Bea,jsp,2008年被oracle收购)
JBoss(RedHat)
www.netcraft.com:查看web服务的最新市场排名,且支持查看其站点服务器的软件类型
代理
Web代理服务器工作于web客户端和web服务器之间。它负责接收来自于客户端的http请求,并将其转发至对应的服务;而后接收来自服务端的响应
,并将响应送回至客户端
apache:17
早先产生于NCSA,httpd
A Patchy Server(一个充满补丁的服务)最后被简称为apache
FSF:GUN Free Software Foundation
ASF:Apache Software Foundation
web:httpd
Tomcat
Hadoop(提供并行处理环境,提供高性能运算非常重要的运算框架,可将数千台电脑组织起来完成同一个任务)
httpd:
提供纯粹的web服务,并且Open source
httpd的特性:
事先创建进程
按需维持适当的进程
模块设计,核心比较小,各种功能都模块添加(包括php)
支持运行时配置,支持单独编译模块
支持多种多种方式的虚拟主机配置
虚拟主机:
物理服务器
web程序也只有一个
却可以提供多个不同的服务
基于IP的虚拟主机
基于端口的虚拟主机
基于域名的虚拟主机
支持https协议(mod_ssl)
支持用户认证:简单认证,摘要式认证,基于表单的认证
支持基于IP或主机名的ACL
支持每目录的访问控制
支持URL重写



























































httpd在redhat中的安装配置:
rpm包安装
源码编译
①selinux(事先处于关闭状态)
/usr/sbin/httpd(MPM:prefork)Redhat5.8的系统上httpd工作模式多道处理模块
httpd:root,root(并不响应用户请求,创建和销毁空闲进程的;主导进程)linux上小于1024的端口要想使用只有管理员有权限
httpd:apache,apache(work process 响应用户的请求)
Port:(80/TCP),(SSL:443/TCP)
/etc/httpd:工作目录,相当于程序安装目录
/etc/httpd/conf:配置文件目录
主配置文件:httpd.conf
/etc/httpd/conf.d/*.conf 都是httpd的主配置文件的组成部分,被httpd.conf包含进去了
/etc/httpd/modules:模块目录
/etc/httpd/logs-->/var/log/httpd:日志目录
日志文件有两类:访问日志access_log和error_log
资源路径:/var/www/
html:静态页面目录
cgi-bin:apache提供动态内容的路径
cgi(common gateway interface):是能够让web程序跟额外的程序通讯的一种机制
yum install httpd
rpm -ql httpd | less
/etc/httpd/conf/magic:定义了本地主机如何识别通过MIME格式编码的非纯文本文档的
/usr/bin/ab:服务压力测试工具
认证用户账号密码的几个命令:
/usr/bin/htdigest
/usr/bin/htpasswd
/usr/bin/htdbm
消除httpd的欢迎信息:mv/etc/httpd/conf.d/welcome.html welcome.bak
grep "Section" httpd.conf:查看httpd.conf分成的三个片段
①global Environment 全局配置
如果#号后边没有空格但是跟的字符,是可以启用的选项,由“指令+值”组成
指令是不区分字符大小写的,但是”值“(路径)是区分大小写的
ServerTokens 输出发行商版本号和软件版本号(在apache的官网指令文档中查看)
也可以安装httpd的手册:yum install -y httpd-manual
然后可访问:ip/manual,查看手册内容
ServerRoot "/etc/httpd"服务的根目录
PidFile run/httpd.pid httpd进程pid保存在这个的文件当中
timeout tcp从缓存中读取报文有关的
KeepAlive OFF 是否使用长连接(如果是关的,每次请求服务器的一个资源都要进行三次握手,耗费资源)
MaxKeepAliveRequests 100 处于长连接时一次最多可以让客户端请求多少个资源
KeepAliveTimeout 15 长连接的占用时长
MPM(mtlti processing Modules):多道处理模块
①mpm_winnt:windows NT专用
②prefork:预先生成进程(一个请求用一个进程响应)
③worker:基于线程工作的(一个进程下用多个线程响应用户请求;一个请求用一个线程响应)
④event:基于事件驱动,(一个进程处理多个请求)
httpd的默认响应模型是prefork
修改httpd的响应模型:/etc/sysconfig/httpd 将httpd.worker前边的注释去掉,再起启动,httpd就是prefork响应模型
<IfModule prefork.c>
StartServer 8 服务器刚启动就要启动多少个空闲进程
Min SpareServers 5 服务器最少需要多少个空闲进程
Max SpareServers 20 服务器最大需要多少个空闲进程
ServerLimit 256 为Maxclient指定一个上限值,(需要服务器重启之后才能修改)
MaxClient 256 最多只允许多少个请求同时连进来
MaxRequestPerchild 4000 一个子进程最多能响应多少次用户的请求
</IfModule >
#
<IfModule worker.c>
StartServer 2 默认启动多少进程
MaxClients 150 最多允许多少个进程连进来
MinSpareTheads 25 最小空闲线程
MaxSpareTheads 75 最大空闲线程
ThreadsPerChild 25 一个进程最大生成多少个线程
MaxRequestPerchild 每个进程最多响应多少个请求
</IfModule>
Listen 80 指定监听的地址和端口的但是地址可以省略,如果不带地址。表示监听当前主机所有地址的80端口,而且可以监听
多个端口,Listen可以出现多次
Include conf.d/*.conf conf.d下所有的.conf文件都是主配置文件的组成部分
user:apache的worker进程的属主
Group:apache的worker进程的属组
②‘Main’ server configuration 只提供一个站点不提供虚拟主机
ServerAdmin root@localhost(一般而言每一个站点都应该配置一个管理员)
ServerName 如果不启用此指令,服务在启动的时候会反向解析当前IP地址到某一个主机名,如果解析成功就把主机名当做服务器的名称,否则会报错
UserCanonicalName 正式名称
DocumentRoot 文档根目录(默认存放网页的目录)URL是相对于DocumentRoot路径而言的
<Directory "/var/www/html" >
相当于一个容器,定义了此目录如何被访问
Option(定义这个目录下的网页文档能够在被访问时候的访问属性,它的值有很多,之间用空格隔开)
None: 不启用任何值
Indexes:索引目录,如果根目录中没有index首页,那就将目录中的文件列出来,这种方式很不安全,除非你将这个web服务当成下载站点,可以启用此值
FollowSymLinks:允许访问符号链接,目录下有一个文件夹是符号链接,是否能够访问此链接的内容,不安全的
Includes:允许执行服务器端包含的(SSI)不安全的,不需要启用
SymLinksifOwnerMatch:允许执行符号链接,但是属主必须与执行httpd进程的属主一致
ExecCGI:允许执行CGI脚本
MultiViews:内容协商的机制,通过判断操作系统的语言,给客户端响应网页
ALL:启用所有的功能
AllowOverride:允许覆盖 Authconfig
AuthType:认证的类型(Basic|Digest)
AuthName:限定的访问区域
AuthUserFile:认证用户文件位置
AuthgroupFile:认证组文件存放位置
Require user:认证用户文件能够登录的用户
Require group:组中的用户能够登录访问
htpasswd -c -m /etc/httpd/conf/htpasswd USERNAME
-c:创建httpd第一个认证账号需要使用-c选项,之后不能使用-c选项,否则会清除文件中的所有内容
-m:账号的密码使用md5方式加密
-D:从httpd文件中删除创建的用户
Order:用于定义基于主机的访问控制功能的,也能够实现基于IP,网络地址或主机定义访问控制机制
Order allow,deny(次序很关键,前边定义允许的,后边就都是拒绝的)
allow from
deny from
访问控制地址的表示方式:
IP
network/netmask
hostname:www.song.com
domianname:song.com
Partial IP:172.16=172.16.0.0/16
</Directoy>
<IfModule mod_userdir.c>
#UserDir disabled 用户够在自己的家目录建立个人的网页文件
UserDir public_html
*步骤:添加新用户,将用户的家目录的权限更改为o+x,在家目录中新建public_html目录,在目录中新建index.html文档
selinux(事先处于关闭状态)
</IfModule>
DirectoryIndex index.html index.html.var 定义访问URL的时候没指定访问页面,默认会访问那个页面,如果两个页面都存在那么自左而右
AccessFileName .htaccess 可以对网站根目录的子目录下的html做单独的访问控制,只需要在创建一个.htaccess文件,在文件中定义(AuthType)之类的访问控制机制,一般注释掉
<Files ~ "^.ht"> 拒绝用户访问.ht开头的文件
Order allow,deny
Deny from all
Satisfy All
</Files>
TypesConfig /etc/mime.types 允许http协议传输多媒体文档,非二进制格式的文件,其中定义了那个配置文件保存了MIME类型
DefaultType text/plain 如果没定义了类型,那就是文本下的明文文本信息
<IfModule mod_mime_magic.c>:如果mod_mime_magic.c模块存在,那么MIME的文档是conf/magic


























































































































MIMEMagicFile /usr/share/magic.mime

   MIMEMagicFile conf/magic
</IfModule>
    HostnameLookups Off  每个用户的访问都会被记录到日志里边去,是记录主机名还是IP地址,耗费资源直接注释掉
    ErrorLog logs/error_log 定义错误日志以及存放位置
    LogLevel warn  日志级别
访问日志的记录格式:
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined(混合模式)
    LogFormat "%h %l %u %t \"%r\" %>s %b" common(普通模式)
    LogFormat "%{Referer}i -> %U" referer(只记录客户端访问来源)
    LogFormat "%{User-agent}i" agent(只记录浏览器类型)
    CustomLog logs/access_log combined
    Alias /icons/ "/var/www/icons/"   路径别名,别名的路径'/'和真实路径的'/'一定需要保持一致

③Virtual Host 注意:②和③是无法同时生效的,有主服务器就不能有虚拟主机
基于IP
虚拟主机使用不同的IP地址,但是端口还是相同的
<VirtualHost 192.168.2.197:80>
ServerName song.com
DocumentRoot "/mnt/a/"
<Directory "/mnt/a/">
Options Indexes
</Directory>
</Virtualhost>
<VirtualHost 192.168.2.198:80>
ServerName www.b.org
DocumentRoot "/mnt/c/"
Customlog /var/log/b.org/access_log combined
</Virtualhost>
基于端口
虚拟主机使用相同的IP地址,但是端口不同的。缺点客户端访问时端口信息无从得知
<VirtualHost 192.168.2.197:80>
ServerName song.com
DocumentRoot "/mnt/a/"
<Directory "/mnt/a/">
Options Indexes
</Directory>
</Virtualhost>
<VirtualHost 192.168.2.197:8080>
ServerName www.b.org
DocumentRoot "/mnt/c/"
Customlog /var/log/b.org/access_log combined
</Virtualhost>
基于域名
ip和端口相同主机名称不同,需要启用http.conf文件中的VirtualHostname指令
<VirtualHost 192.168.2.198:80>
ServerName www.a.org
DocumentRoot "/mnt/b/"
<Directory "/mnt/b">
Options None
AllowOverride Authconfig
AuthType basic
AuthName a.org
AuthUserfile /etc/httpd/conf/htpasswd
Require valid-user
Order deny,allow
Deny from 192.168.2.205
</Directory>
Customlog /var/log/a.org/acess_log combined
</Virtualhost>
<VirtualHost 192.168.2.198:80>
ServerName www.b.org
DocumentRoot "/mnt/c/"
Customlog /var/log/b.org/access_log combined
</Virtualhost>
APACHE2.2需要启用NameVirtualHost启用此指令,2.4就不需要此指令
每一个虚拟主机需要配置的信息(使用虚拟主机需要停止中心主机,只需要注释中心主机的DocumentRoot即可):
DocumentRoot /tmp/test/
ServerName:
ServerAlias:主机名称别名
<Directory "/tmp/test/">
Option
AllowOverride
</Directory>
Alias 路径别名
ErrorLog
CustomLog
<Location "/URL">
定义访问URL资源的方法
</Location>
ScriptAlias 说明执行CGI脚本的目录在哪里

































































httpd -t:检测httpd配置文件的语法是否正确
-l:查看已经加载的模块
-D:Apache所支持的额外装载的所有模块
elinks:纯文本界面下浏览网的工具
-dump:不进入交互式模式,显示出网页之后就退出了
-source:显示网页的源代码
LoadRunner:测试工具
pv:page viwe 页面访问量
uv:user viwe 用户访问量







                     ssl配置还未学习                                           ________________来自马哥课程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章