本文共 9759 字,大约阅读时间需要 32 分钟。
HTTP:hypertext transfer protocol:超文本传输协议
超链接:
web:
http/0.9:仅纯文本(超链接),ASCIIHTML:hypertext mark language,超文本标记语言<h2>Title</h2>browser:客户端
1.1.1.1:web,a.html
2.2.2.2:web,a.htmlURI:uniform resource indentifier,统一资源标识符,全局范围内
统一:路径格式上的统一URL:uniform resource locator,统一资源定位符
protocol://HOST:port/path/to/file
web资源:
多个资源很可能被整合为一个html文档web对象:
HTTP方法:
GEThttp/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 ipdestination ipTCP:source portdestination porthttp报文:请求报文,响应报文
http首部:
GET /2.htmlHost:www.magedu.com(虚拟主机)URL:
请求报文语法:
<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.1Host:www.magedu.comConnection: keep-alive响应报文:
HTTP/1.1 200 okx-powered-by: PHP/5.2.17Vary:accept-encoding,cookie,user-agentcache-control:max-age=3,must-revalidatecontent-length:6931web服务器的主要操作
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:serverclient-》request-》server
URLserver-》response-》clientHTTP Method
GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS,CONNECTIONserver操作
server模型http,MPM:preforkworkeventClient:
IE FirefoxChromeOperaSafariServer:
Apache-->httpdIISnginxlighttpdthttpd应用程序服务器:
IIS tomcat(apache,JSP,open source)websphere(IBM,JSP,commodity)weblogic(Oracle,JSP,commodity)JBoss(RedHat)www.netcraft.com:各种web服务器所占的份额
Apache: 17,
NCSA,httpdA patchy server = apacheFSF:GUN,GPL
ASF:Apache software foundationweb:httpdtomcatHadoopwww.apache.org
web:httpd:
web server,open source2.2,2.4,2.0,1.3httpd:
事先创建进程按需维持适当的进程模块化设计,核心比较小,各种功能都模块添加(包括php)支持运行配置,支持单独编译模块支持多种方式的虚拟主机配置虚拟主机:
物理服务器web程序也只有一个却可以服务多个不同的站点socket ip:port基于ip的虚拟主机;基于端口的虚拟主机;基于域名的虚拟主机;protocol://HOST:port/path/to/source
Method URL versionheaderbody
GET /download/linux.tar.bz2 HTTP/1.0
Host: www.magedu.com支持https协议(mod_ssl)
支持用户认证支持基于ip或主机名的ACL支持每目录的访问控制支持URL重写,/image/a.jpeg,/bbs/images/abc.jpegRedHat(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/httpdport:(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 --》clientPerl,Python,Java,(servlet,jsp),phpfastcgi:就是httpd主进程创建一批空闲的进程放在这里,等用户请求动态内容的时候,直接调用这个空间进程去响应。
程序:指令和数据
数据,数据库服务CPU-boundapache
phpmysqlLAMPhttpd:
directive value指令不区分字符大小写value则根据需要有可能要区分LoadRunner
MPM:multi path modules,多处理模块
mpm_winntprefork(一个请求用一个进程响应)worker(一个请求用一个线程响应,(启动多个进程,每个进程生成多个线程))event(一个进程处理多个请求)httpd -l
httpd.worker -lhttpd.event -lhttpd -Mvim /etc/sysconfig/httpd安装配置:
yum install httpd httpd-manualrpm -ql httpdservice httpd startnetstat -tunlp | grep ':80'ps aux | grep 'httpd'cd /etc/httpd/conf.dmv welcome.conf welcome.conf.bakcd /var/www/htmlvim 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 80Listen 172.16.100.1:8080LoadModule
DocumentRoot "/var/www/html"
URL路径跟本地文件系统路径不是一码事儿,URL是相对于DocumentRoot的路径而言
<Directory>
optionsNone:不支持任何选项indexes:允许索引目录FollowSynLink:允许访问符号链接指向的原文件Includes:允许支持服务端包含(SSI)ExecCGI:允许执行CGI脚本All:支持所有选项AllowOverride AuthConfig
AuthType BasicAuthName "Restricted Site..."AuthUserFile "/etc/httpd/conf/htpasswd"AuthGroupFile "/etc/httpd/conf/htgroup"Require valid-user或者 Require user hadoop或者 Require group myusersOrder deny,allow
Allow from all</Directory>
Order:用于定义基于主机的访问功能的,IP,网络地址或主机定义访问控制机制
Order allow,denyallow fromdeny from192.168.0.0/24
Order allow,deny
allow from 192.168.0.0/24Order deny,allow
Deny from 192.168.0.0/24elinks
-dump-sourcehtpasswd -c -m /etc/httpd/conf/htpasswd hadoop
htpdasswd -m /etc/httpd/conf/htpasswd tomhttpd -tvim /etc/httpd/conf/htgroup
myusers: hadoop tom地址的表示方式:
IPnetwork/netmaskHOSTNAME:www.a.comDOMAINNAME;magedu.comPartial IP:172.16,172.16.0.0/16vim /etc/httpd/conf/htgroup
myusers:hadoop tom#UserDir disable
UserDir public_htmlsu - hadoop
mkdir public_htmlcd public_htmlvim index.htmlchmod o+x public_htmlservice httpd restarthadoop
#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
定义别名:可以把客户端访问的目录定义在与根不用的路径下面
mkdir /bbs/forumvim /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:
中心主机虚拟主机基于IPIP1:80IP2:80基于端口IP:80IP:8080基于域名 IP:80主机名不同www.magedu.comwww.a.orgwww2.a.orgwww.b.netapache 2.2
NameVirtualHostapache 2.4
ServerName
ServerAliasDocumentRoot /www/a.org/<Directory "/www/a.org">OptionAllowoverride</Directory>
AliasErrorlogCustomLog<Location "/images">
</Location>
ScritAlias/www/test
www.a.org/images/CGI:Common Gateway Interface
客户端动态
服务器端动态id -un:显示当前用户名
得先取消中心主机,注释中心主机的DocumentRoot即可
虚拟主机的定义:<VirtualHost Host></VirtualHost>
基于IP,HOST的写法
HOSTIP1:80IP2:80基于端口:
HOSTIP:80IP:8080基于域名:
*:80ServerName 不同vim httpd.conf
#DocumentRoot "/var/www/html"vim /conf.d/virtual.conf
<VirtualHost 172.16.100.1:80>ServerName hello.magedu.comDocumentRoot "/www/magedu.com"</VirtualHost><VirtuaHost 172.16.100.2:80>
ServerName www.a.orgDocumentRoot "/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 showvim httpd.conf
Listen 80Listen 8080vim /conf.d/virtual.conf
<VirtuaHost 172.16.100.1:80>ServerName hello.magedu.comDocumentRoot "/www/magedu.com"</VituaHost><VirtuaHost 172.16.100.2:80>
ServerName www.a.orgDocumentRoot "/www/a.org"</VituaHost><VirtuaHost 172.16.100.1:8080>
ServerName www.b.netDocumentRoot "/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.comDocumentRoot "/www/magedu.com"CustomLog "/var/www/httpd/magedu.com/access_log" combined</VituaHost><VirtuaHost 172.16.100.2:80>
ServerName defaultDocumentRoot "/www/default"</VituaHost><VirtuaHost 172.16.100.2:80>
ServerName www.a.orgDocumentRoot "/www/a.org"CustomLog "/var/www/httpd/a.org/access_log" combined<Directory "/www/d.gov">Options noneAllowOverride authconfigAuthType basicAuthName "Restrict area."AuthUserFile "/etc/httpd/.htpasswd"Require User tom</Directory></VituaHost><VirtuaHost 172.16.100.2:80>
ServerName www.d.govDocumentRoot "/www/d.gov"<Directory "/www/d.gov">Options noneAllowOverride noneOrder deny,allowDeny form 172.16.100.177</Directory></VituaHost><VirtuaHost 172.16.100.1:8080>
ServerName www.b.netDocumentRoot "/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.gov172.16.100.1 www.a.orgmkdir /var/www/httpd/a.org/access_log
mkdir /var/www/httpd/magedu.com/access_loghtpasswd -c -m /etc/httpd/.htpaswwd tom
vim httpd.conf
<Location /server-status>SetHandler server-statusOrder allow,denyAllow 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 = CNstateOrProvinceName_default = HenanlocalityName_default = ZhengzhouO.organizationName_default = MageEduorganizationUnitName_default = Techopenssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
vim ../tls/openssl.cnf
[ CA_default ]dir = /etc/pki/CAmkdir certs crl newcerts
touch index.txtecho 01 > serial在web服务器上面172.16.100.1:
cd /etc/httpd/mkdir sslcd 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.comDocumentRoot "/www/magedu.com"SSLEngine onSSLCertiFicateFile /etc/httpd/ssl/httpd.crtSSLCertificateKeyFile /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不知道转载于:https://blog.51cto.com/12406012/2368231