apache

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不知道

https://hello.magedu.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章