1.HTTP协议简介
HTTP(HyperText Transfer Protocol,超文本传输协议)是Internet上应用最为广泛的一种网络协议,所有的WWW文件都必须遵循这个标准。HTTP是一个客户端和服务器端请求和应答的标准。通过web浏览器或其他的工具,由HTTP客户端使用URL发起一个请求,建立一个到服务器指定端口的TCP连接。
tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路
udp:User Datagram Protocol,无连接的协议
0-1023:众所周知,永久的分配给固定的应用使用,特权端口
1024-41951:亦为注册端口,但要求并不是特别严格,分配给程序注册为某应用使用
41952+:客户端程序随机使用的端口;动态端口,或私有端口;其范围的定义:/proc/sys/net/ipv4/ip_local_port_range
HTTP/1.1定义了7种动作来表明Request-URI指定资源的不同操作方式,如下
GET:从服务器获取一个资源;
HEAD:只从服务器获取文档的响应首部;
POST:向服务器发送要处理的数据;
PUT:将请求的主体部分存储在服务器上;
DELETE:请求删除服务器上指定的文档;
TRACE:追踪请求到达服务器中间经过的代理服务器;
OPTIONS:请求服务器返回对指定资源支持使用的请求方法;
HTTP服务器回应客户端状态码主要有以下几个
1xx:100-101, 信息提示;
2xx:200-206, 代表请求已被成功接收
3xx:300-305, 重定向,指明后续的请求地址
4xx:400-415, 错误类信息,客户端错误
5xx:500-505, 错误类信息,服务器端错误
常用的状态码:
200: 成功,请求的所有数据通过响应报文的entity-body部分发送;OK
301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently
302: 与301相似,但在响应报文中通过Location指明资源现在所处临时新位置; Found
304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified
401: 需要输入账号和密码认证方能访问资源;Unauthorized
403: 请求被禁止;Forbidden
404: 服务器无法找到客户端请求的资源;Not Found
500: 服务器内部错误;Internal Server Error
502: 代理服务器从后端服务器收到了一条伪响应;Bad Gateway
2.常见的web服务器
Apache http server
Lighttpd
IIS
Nginx
Zeus web server
Sun ONE
3.Apache http server是一个开源的WEB服务器,可以在大多数的操作系统中运行。
4.Apache的安装
rpm方式
rpm -ivh httpd-2.2.3-11.e15_1.3.i386.rpm
yum方式
yum install httpd -y
5.常规配置
5.1Apache服务的相关命令
service httpd start 启动
service httpd restart 重启
service httpd stop 停止
service httpd status 状态
service httpd reload 重载
5.2Apache服务的自启动
chkconfig httpd on
chkconfig httpd off
chkconfig httpd --level 35 on
chkconfig httpd --level 35 off
5.3配置文件
主配置文件/etc/httpd/conf/httpd.conf由3部分组成
Global Environment:全局配置
Main server configuration:主服务配置
Virtual Hosts:虚拟主机配置
5.4查看Apache载入的模块,httpd -M
5.5在Apache中可通过容器Directoy,File,Location对配置或某个虚拟主机进行控制,常见的容器是文件系统和网络空间
文件系统使用的格式:
<Directory />
参数
</Directory>
网络空间格式:
<Location 路径>
参数
</Location>
5.6apache的简单配置
指定监听地址和端口:默认是 Listen [IP:]80
(1) IP省略时表示监听本机上所有可用的IP地址;
(2) Listen指令可以出现多次,用于指明多个不同的监听端口或套接字:
Listen 192.168.108.5:80
Listen 192.168.108.5:8080
持久连接相关:持久连接:连接建立后,每个资源获取结束不会断开连接,而继续等待其它资源请求并完成传输,非持久连接:每个资源都是单独通过专用的连接进行获取
KeepAlive Off|On 是否持久连接
MaxKeepAliveRequests 100 在持久连接期间,所允许的最大请求数量
KeepAliveTimeout 15 在同一个客户连接中,下一个请求的等待时间
MPM
多路处理模块:并发请求响应的不同实现,主要有三种模式prefer,worker,event
prefer:一个主进程,生成多个子进程,每个子进程处理一个请求
worker:多个主进程生成多个子进程,子进程又生成多个线程,每个线程处理一个请求
event:一个主进程生成多个子进程,每个子进程处理N个请求
httpd -l: 查看静态编译的模块
httpd -M: 查看所有模块,包括静态编译和DSO模
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
DSO
配置指令模块加载:
LoadModule <module_name> <module_path>
DocumentRoot指向的路径为URL起始的位置
Directory中的访问控制定义
(1) Options
Indexes: 当访问的路径下无默认主页面文件存在,且没有指定具体要访问的资源时,会将此路径下的所有资源以列表呈现给用户;非常危险,不建议使用;
FollowSymLinks:如果某页面文件是为指向DocumentRoot之外路径上的其它文件时,将直接显示目标文件的内容;
None: none
All: 所有的都启用;
(2) 基于来源地址访问控制
Order: 检查次序
Order Allow Deny:只有明确Allow的来源地址,才允许访问,其它的均为Deny
Order Deny Allow:
Allow from:允许访问的来源地址
Deny from:拒绝访问的来源地址
Order Allow Deny
Deny from 172.16.100.2
Allow from 172.16.0.0/16
定义默认的主页面
DirectoryIndex index.html index.html.var 自左而右,找到首次匹配到的文件;就将其做为默认主页面返回
ErrorLog logs/error_log 错误日志的格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
路径别名 主目录名是DocumentRoot "/var/www/html"
Alias /URL/ "/path/to/some_directory"
例如:Alias /bbs/ "/web/bbs/htdocs/"
URL: http://www.magedu.com/bbs/index.html --> /web/bbs/htdocs/index.html
AddDefaultCharset UTF-8 选定字符集,常用字符集:GBK, GB2312, GB18030
基于用户的访问控制
<Directory "/data/web/html/employee">
options None
AllowOverride None
AuthType Basic
AuthName "Employee information, only for employee"
AuthUserFile /etc/httpd/users/.htpasswd
Require user tom ,jeery
</Directory>
http协议支持的认证方式:basic,digest两种。basic认证的实现
定义安全域
<Directory "/data/web/html/employee">
options None
AllowOverride None
AuthType Basic
AuthName "Employee information, only for employee"
AuthUserFile /etc/httpd/users/.htpasswd
Require user tom ,jeery
</Directory>
提供用户账号文件
htpasswd命令用于维护此文件
htpasswd [ -c ] [ -m ] [ -D ] passwdfile username
-c: 添加第一用户时创建此文件;
-m: 以md5格式加密用户密码存放;
-s: 以sha格式加密用户密码存放;
-D:删除指定用户
虚拟主机:一个物理器可以服务于多个站点,每个站点可通过一个或多个虚拟主机来实现
1.基于IP
<VirtualHost 172.16.100.11:80>
ServerName www.a.com
DocumentRoot /vhost/a.com/htdocs/
</VirtualHost>
<VirtualHost 172.16.100.21:80>
ServerName www.b.org
DocumentRoot /vhost/b.org/htdocs/
</VirtualHost>
2.基于端口
<VirtualHost 172.16.100.11:80>
ServerName www.a.com
DocumentRoot /vhost/a.com/htdocs/
</VirtualHost>
<VirtualHost 172.16.100.11:808>
ServerName www.b.com
DocumentRoot /vhost/b.com/htdocs/
</VirtualHost>
3.基于FQDN
NameVirtualHost 172.16.100.11:80
<VirtualHost 172.16.100.11:80>
ServerName www.a.com
DocumentRoot /vhost/a.com/htdocs/
</VirtualHost>
<VirtualHost 172.16.100.11:80>
ServerName www.b.org
DocumentRoot /vhost/b.org/htdocs/
</VirtualHost>
内置的status页面
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 172.16.0.0/16
</Location>
curl命令
本文出自 “天才来自重复” 博客,请务必保留此出处http://laoli110.blog.51cto.com/9136611/1704892
原文:http://laoli110.blog.51cto.com/9136611/1704892