HTTP:hypertext transfer protocol:超文本传输协议
超链接:
web:
http/0.9:仅纯文本(超链接),ASCII
HTML:hypertext mark language,超文本标记语言
<h2>Title</h2>
browser:客户端
1.1.1.1:web,a.html
2.2.2.2:web,a.html
URI:uniform resource indentifier,统一资源标识符,全局范围内
统一:路径格式上的统一
URL:uniform resource locator,统一资源定位符
protocol://HOST:port/path/to/file
http://www.magedu.com/download/linux.tar.gz
web资源:http://www.magedu.com/logo.gif
多个资源很可能被整合为一个html文档
web对象:
HTTP方法:
GET
http/1.0:PUT,POST,DELETE
MIME:multipurpose internet mail extension,多用途互联网邮件扩展
SMTP:simple mail transmission protocol,纯文本
MIME:将非文本数据在传输前重新编码为文本格式,接收方能够用相反的方式将其重新还原为原来的格式,还能够调用相应的程序来打开此文件
base64
协议首部:
image/jpeg
动态效果:ActiveX
Java,applet,jre
动态网页:服务器端存储的文档非HTML格式,而是编程语言开发的脚本,脚本接受参数之后在服务器运行一次,运行完成之后会生成HTML格式的文档,把生成的文档发给客户端
web:index.php
web --》procotol --》 php(运行index.php)
http
index.html:
引用N个web对象,URL
动态网页:包含静态内容和动态内容
动态内容部分才需运行
缓存:
阻塞
非阻塞
IP:
source ip
destination ip
TCP:
source port
destination port
http报文:请求报文,响应报文
http首部:
GET /2.html
Host:www.magedu.com(虚拟主机)
URL:http://www.magedu.com/2.html
请求报文语法:
<method><request-URL> <version>
<headers>
<entity-body>
响应报文语法:
<version><status> <reason-phrase>
<headers>
<entity-body>
状态代码:
1xx:纯信息
2xx:"成功"类的信息(200,201,202)
3xx:重定向类的信息(301,302,304)
4xx:客户端错误类的信息(404)
5xx:服务器端错误类的信息
请求报文:
GET / HTTP/1.1
Host:www.magedu.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-revalidate
content-length:6931
web服务器的主要操作
1.建立连接
2.接收请求
3.处理请求
4.访问资源
5.构建响应
6.发送响应
7.记录日志
5s:10 image,3 css,5html
18资源
http,tcp:三次握手,四次断开
http/1.1:
增强了缓存的功能
长连接
单进程/单线程
多进程/多线程
事件驱动
通知
c/s
c:clinet agent(browser,spider)
s:server
client-》request-》server
URL
server-》response-》client
HTTP Method
GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS,CONNECTION
server操作
server模型
http,MPM:
prefork
work
event
Client:
IE
Firefox
Chrome
Opera
Safari
Server:
Apache-->httpd
IIS
nginx
lighttpd
thttpd
应用程序服务器:
IIS
tomcat(apache,JSP,open source)
websphere(IBM,JSP,commodity)
weblogic(Oracle,JSP,commodity)
JBoss(RedHat)
www.netcraft.com:各种web服务器所占的份额
Apache: 17,
NCSA,httpd
A patchy server = apache
FSF:GUN,GPL
ASF:Apache software foundation
web:httpd
tomcat
Hadoop
www.apache.org
web:http://httpd.apache.org
httpd:
web server,open source
2.2,2.4,2.0,1.3
httpd:
事先创建进程
按需维持适当的进程
模块化设计,核心比较小,各种功能都模块添加(包括php)
支持运行配置,支持单独编译模块
支持多种方式的虚拟主机配置
虚拟主机:
物理服务器
web程序也只有一个
却可以服务多个不同的站点
socket ip:port
基于ip的虚拟主机;
基于端口的虚拟主机;
基于域名的虚拟主机;
protocol://HOST:port/path/to/source
Method URL version
header
body
GET /download/linux.tar.bz2 HTTP/1.0
Host: www.magedu.com
支持https协议(mod_ssl)
支持用户认证
支持基于ip或主机名的ACL
支持每目录的访问控制
支持URL重写,/image/a.jpeg,/bbs/images/abc.jpeg
RedHat(httpd):
rpm包
源码编译
httpd:SELinux(事先让其处于permssive,disabled)
httpd:
/usr/sbin/httpd(MPM:prefork)
httpd:root,root(master process)
httpd:apache,apache(worker process)
/etc/rc.d/init.d/httpd
port:(80/tcp),(ssl:443/tcp)
/etc/httpd:工作跟目录,相当于程序安装目录
/etc/httpd/conf:配置文件目录
主配置文件:httpd.conf
/etc/httpd/conf.d/*.conf
/etc/httpd/modules:模块目录
/etc/httpd/logs--》/var/log/httpd:日志目录
日志文件有两类:访问日志access_log,错误日志:err_log
/var/www
html:静态页面
cgi-bin:动态内容
CGI:common gateway interface,通用网关接口
client --》httpd(index.cgi)--》spawn process(index.cgi)--》httpd --》client
Perl,Python,Java,(servlet,jsp),php
fastcgi:就是httpd主进程创建一批空闲的进程放在这里,等用户请求动态内容的时候,直接调用这个空间进程去响应。
程序:指令和数据
数据,数据库服务
CPU-bound
apache
php
mysql
LAMP
httpd:
directive value
指令不区分字符大小写
value则根据需要有可能要区分
LoadRunner
MPM:multi path modules,多处理模块
mpm_winnt
prefork(一个请求用一个进程响应)
worker(一个请求用一个线程响应,(启动多个进程,每个进程生成多个线程))
event(一个进程处理多个请求)
httpd -l
httpd.worker -l
httpd.event -l
httpd -M
vim /etc/sysconfig/httpd
安装配置:
yum install httpd httpd-manual
rpm -ql httpd
service httpd start
netstat -tunlp | grep ':80'
ps aux | grep 'httpd'
cd /etc/httpd/conf.d
mv welcome.conf welcome.conf.bak
cd /var/www/html
vim a.html
<html>
<title>hello world</title>
<h1>haha</h1>
welcome to our website
</html>
cd /etc/httpd/conf
vim httpd.conf
<IfModule prefork.c>
</IfModule>
Listen 80
Listen 172.16.100.1:8080
LoadModule
DocumentRoot "/var/www/html"
URL路径跟本地文件系统路径不是一码事儿,URL是相对于DocumentRoot的路径而言
<Directory>
options
None:不支持任何选项
indexes:允许索引目录
FollowSynLink:允许访问符号链接指向的原文件
Includes:允许支持服务端包含(SSI)
ExecCGI:允许执行CGI脚本
All:支持所有选项
AllowOverride AuthConfig
AuthType Basic
AuthName "Restricted Site..."
AuthUserFile "/etc/httpd/conf/htpasswd"
AuthGroupFile "/etc/httpd/conf/htgroup"
Require valid-user
或者 Require user hadoop
或者 Require group myusers
Order deny,allow
Allow from all
</Directory>
Order:用于定义基于主机的访问功能的,IP,网络地址或主机定义访问控制机制
Order allow,deny
allow from
deny from
192.168.0.0/24
Order allow,deny
allow from 192.168.0.0/24
Order deny,allow
Deny from 192.168.0.0/24
elinks http://172.16.100.1
-dump
-source
htpasswd -c -m /etc/httpd/conf/htpasswd hadoop
htpdasswd -m /etc/httpd/conf/htpasswd tom
httpd -t
vim /etc/httpd/conf/htgroup
myusers: hadoop tom
地址的表示方式:
IP
network/netmask
HOSTNAME:www.a.com
DOMAINNAME;magedu.com
Partial IP:172.16,172.16.0.0/16
vim /etc/httpd/conf/htgroup
myusers:hadoop tom
#UserDir disable
UserDir public_html
su - hadoop
mkdir public_html
cd public_html
vim index.html
chmod o+x public_html
service httpd restart
hadoop
http://172.16100.1/~tom/
#AccessFileName .htaccess
%h:客户端地址
%l:访问用户名
%u:认证登陆的用户名
%t:登陆时间
%r:请求报文第一行
%s:状态码
%b:响应报文大小
%{Referer}i:从哪个页面跳转到这个页面的
PV:page view,每天的页面访问量
UV:user view,每天的独立ip访问量
/web/html
bbs/images
/www/forum bbs
http://172.16.100.1/bbs/images/logo.jpeg
定义别名:可以把客户端访问的目录定义在与根不用的路径下面
mkdir /bbs/forum
vim /etc/hhtpd/conf/httpd.conf
Alias /luntan "/bbs/forum"或者Alias /luntan/ "/bbs/forum/"
vim /bbs/forum/index.html
/luntan目录不需要存在
回顾:
定义网站文档目录
访问选项:options
基于主机的访问控制
基于用户或组的访问控制
用户个人站点
错误日志
日志格式
访问日志 PV UV
路径别名
apache虚拟主机:
apache:服务器,Host,物理主机
虚拟主机:
apache服务:
服务于多个不同的站点
apache:
中心主机
虚拟主机
基于IP
IP1:80
IP2:80
基于端口
IP:80
IP:8080
基于域名
IP:80
主机名不同
www.magedu.com
www.a.org
www2.a.org
www.b.net
apache 2.2
NameVirtualHost
apache 2.4
ServerName
ServerAlias
DocumentRoot /www/a.org/
<Directory "/www/a.org">
Option
Allowoverride
</Directory>
Alias
Errorlog
CustomLog
<Location "/images">
</Location>
ScritAlias
/www/test
www.a.org/images/
CGI:Common Gateway Interface
客户端动态
服务器端动态
id -un:显示当前用户名
得先取消中心主机,注释中心主机的DocumentRoot即可
虚拟主机的定义:
<VirtualHost Host>
</VirtualHost>
基于IP,HOST的写法
HOST
IP1:80
IP2:80
基于端口:
HOST
IP:80
IP:8080
基于域名:
*:80
ServerName 不同
vim httpd.conf
#DocumentRoot "/var/www/html"
vim /conf.d/virtual.conf
<VirtualHost 172.16.100.1:80>
ServerName hello.magedu.com
DocumentRoot "/www/magedu.com"
</VirtualHost>
<VirtuaHost 172.16.100.2:80>
ServerName www.a.org
DocumentRoot "/www/a.org"
</VituaHost>
mkdir /www/magedu.com
vim index.html
<title>MageEdu</title>
<h1>magedu.com</h1>
mkdir /www/a.org
vim index.html
<title>A</title>
<h1>a.org</h1>
ip addr add 172.16.100.2/16 dev eth0
ip add show
vim httpd.conf
Listen 80
Listen 8080
vim /conf.d/virtual.conf
<VirtuaHost 172.16.100.1:80>
ServerName hello.magedu.com
DocumentRoot "/www/magedu.com"
</VituaHost>
<VirtuaHost 172.16.100.2:80>
ServerName www.a.org
DocumentRoot "/www/a.org"
</VituaHost>
<VirtuaHost 172.16.100.1:8080>
ServerName www.b.net
DocumentRoot "/www/b.net"
</VituaHost>
mkdir /www/b.net
vim index.html
<title>B</title>
<h1>b.net</h1>
vim /conf.d/virtual.conf
NameVirtualHost 172.16.100.2:80
<VirtuaHost 172.16.100.1:80>
ServerName hello.magedu.com
DocumentRoot "/www/magedu.com"
CustomLog "/var/www/httpd/magedu.com/access_log" combined
</VituaHost>
<VirtuaHost 172.16.100.2:80>
ServerName default
DocumentRoot "/www/default"
</VituaHost>
<VirtuaHost 172.16.100.2:80>
ServerName www.a.org
DocumentRoot "/www/a.org"
CustomLog "/var/www/httpd/a.org/access_log" combined
<Directory "/www/d.gov">
Options none
AllowOverride authconfig
AuthType basic
AuthName "Restrict area."
AuthUserFile "/etc/httpd/.htpasswd"
Require User tom
</Directory>
</VituaHost>
<VirtuaHost 172.16.100.2:80>
ServerName www.d.gov
DocumentRoot "/www/d.gov"
<Directory "/www/d.gov">
Options none
AllowOverride none
Order deny,allow
Deny form 172.16.100.177
</Directory>
</VituaHost>
<VirtuaHost 172.16.100.1:8080>
ServerName www.b.net
DocumentRoot "/www/b.net"
</VituaHost>
mkdir /www/d.gov
vim index.html
<title>D</title>
<h1>d.gov</title>
mkdir /www/default
vim index.html
<h1>default</h1>
vim /etc/hosts(在哪个客户端访问就在哪里域名解析)
172.16.100.1 www.d.gov
172.16.100.1 www.a.org
mkdir /var/www/httpd/a.org/access_log
mkdir /var/www/httpd/magedu.com/access_log
htpasswd -c -m /etc/httpd/.htpaswwd tom
vim httpd.conf
<Location /server-status>
SetHandler server-status
Order allow,deny
Allow from all
</Location>
基于openssl的https服务配置
httpd -M:查看http所已经加载的模块
yum install mod_ssl
rpm -ql mod_ssl
在172.16.100.8上面创建证书颁发机构:
cd /etc/pki/CA:所有操作均在此目录下进行
生成私钥:
( umask 077;openssl genrsa -out private/cakey.pem 2048)
生成自签证书:
vim ../tls/openssl.cnf
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName_default = Henan
localityName_default = Zhengzhou
O.organizationName_default = MageEdu
organizationUnitName_default = Tech
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
vim ../tls/openssl.cnf
[ CA_default ]
dir = /etc/pki/CA
mkdir certs crl newcerts
touch index.txt
echo 01 > serial
在web服务器上面172.16.100.1:
cd /etc/httpd/
mkdir ssl
cd ssl
生成密钥:
(umask 077; openssl genrsa 1024 > httpd.key)
生成向证书颁发机构签署请求:
openssl req -new -key httpd.key -out httpd.csr
把签署请求拿到证书颁发机构去签署:
scp httpd.csr 172.16.100.8:/tmp
在172.16.100.8上面进行签署:
openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3650
拿回已经签署好的证书:
在172.16.100.1上面进行
scp 172.16.100.8:/tmp/httpd.crt ./
在172.16.100.1上面配置使用证书:
cd /etc/httpd/conf.d/
vim ssl.conf
<VirtualHost 172.16.100.1:443>
ServerName hello.magedu.com
DocumentRoot "/www/magedu.com"
SSLEngine on
SSLCertiFicateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
</VirtualHost>
service httpd restart
客户端要检查web服务器端的证书是否可信,要拿着证书颁发机构的证书去验证
scp -r 172.16.100.8:/etc/pki/CA/cacert.pem ./
mv cacert.pem cacert.crt
然后安装证书,windows双击安装,Linux不知道