apache
NCSA , httpd
A Patchy Server =apache
FSF: GUN , GPL
ASF: Apache Software Foundation
web: httpd
tomcat
Hadoop
www.apache.org #官网网址
httpd版本:
Web Server Open source
2.2 , 2.4 , 2.0
httpd:
事先创建进程
按需维持适当的进程
模块设计,核心比较小,各种功能都模块添加(包括php)
支持运行配置,支持单独编译模块
支持多种方式的虚拟主机配置
socket ip:port
虚拟主机:
基于IP的虚拟主机
基于端口的虚拟主机
基于域名的虚拟主机
protocol://HOST:POST/path/to/souce
Method URL version
header
body
GET /download/linux.tar.bz2 HTTP/1.0
Host:www.amd5.cn
支持https协议(mod_ssl)
支持用户认证
支持基于IP或主机名的ACL
支持每目录的访问控制
支持URL重写
安装方式:
rpm包:
源码编译:
httpd:SELinux(事先让其处于permssive,disable)
httpd:
/usr/sbin/httpd(MPM: prefork)
httpd: root , rot (master process)
httpd: apache ,apche (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 Geteway Interface
Client --> httpd (index.cgi) --> Spawn Process (index.cgi) --> httpd --> Client
perl, python ,java ,(servlet,jsp),php
fastcgi:
程序:指令和数据
数据,数据库服务
httpd安装:yum install -y httpd
directive value
指令不区分字符大小写
value 则根据需要有可能区分大小写
loadRunner 模拟真实测试软件
MPM:Multi Path Modules
mpm_winnt #windows服务器
prefork #(一个请求用一个进程响应)预先生成进程(prefork,多进程模式,1个进程服务于1个用户请求,成本比较高。但是,稳定性最高,不需要支持线程安全。)
<IfModule prefork.c>
StartServers 8 # 服务启动,启动多少个空闲进程
MinSpareServers 5 #最少多少个空闲进程
MaxSpareServers 20 #最大空闲进程
ServerLimit 256 #最大进程数
MaxClients 256 # 最多多少个进程同时访问
MaxRequestsPerChild 4000 #一个子进程最多响应多少请求
</IfModule>
worker #(一个请求用一个线程响应(启动多个进程,每个进程生成多个线程))(多线程(worker,多进程多线程模式,1个进程含有多个worker线程,1个worker线程服务于1个用户请求,因为线程更轻量,成本比较低。但是,在KeepAlive场景下,worker资源会被client占据,无法响应其他请求(空等待))
<IfModule worker.c>
StartServers 4 # 服务启动以后启动进程数
MaxClients 300 # 最多同时运行多少个请求
MinSpareThreads 25 # 最小空闲线程
MaxSpareThreads 75 #最大空闲线程
ThreadsPerChild 25 #每个进程生成多少个线程
MaxRequestsPerChild 0 #每个子进程运行最大连接数
</IfModule>
event # (一个进程处理多个请求)
<IfModule mpm_event_module>
StartServers 3 #服务启动以后启动的进程数
MinSpareThreads 75 #最小空闲线程
MaxSpareThreads 250 #最大空闲线程
ThreadsPerChild 25 #每个进程生成多少个线程
MaxRequestWorkers 400 #最大请求数
MaxConnectionsPerChild 0 #每个子进程运行最大连接数,
</IfModule>
httpd命令:
-l:查看支持的模块
-M : 查看支持额外的模块
-t:查看配置文件语法错误
URL路径跟本地文件系统路径不是一码事儿,URL是相对于DocumentRoot
Options
none:不支持任何选项
Indexes:运行索引目录
FollowSynlinks:允许访问符号链接指向的原文件
Includes:允许执行服务端包含(SSI)
ExcCGI:允许运行CGI脚本
MultiViews:根据来自地域,显示不同语言的页面
ALL :执行所有选项
Order :用于定义基于主机的访问功能,IP,网络地址或主机定义访问控制机制(Apache2.4不支持allow,deny机制)
Order allow,deny #后面是默认选项
Allow fromdeny from
地址的表示方式:
IP
network/netmask
HOSTNAME:www.a.com
DOMAINAME: test.com
Partial IP: 172.16或者 172.16.0.0/16
#禁止172.16.100.2, 192.168.1.100访问
Order deny,allow
deny from 172.16.100.2, 192.168.1.100
AllowOverride:认证访问
AllowOverride AuthConfig(AuthConfig基于文件中的用户名密码认证访问)
AuthType Basic #(Basic基本认证类型)
AuthName "Restricted Files" #提示信息
AuthUserFile "/usr/local/apache/passwd/passwords" #认证用户文件
htpasswd命令:
-c :首次创建
-m:md5加密
-D:删除用户
htpasswd -c -m /etc/httpd/conf/htpaswwd tom
AuthGroupFile "/usr/httpd/conf/htgroup" #认证组文件
Require user tom #允许tom 用户登录(Require valid-user 允许文件中所有用户登录)
Require group myusers # 允许myusers组访问,(此时Require user可以省略)
#vim htgroup
myusers: tom hadoop
Alias:路径别名
Alias /luntan/ "/www/bbs/" #http://www.test.com/luntan 即可访问/www/bbs/里面的内容
虚拟主机
HTTPS
PHP+MySQL
apache虚拟主机:
apache: 服务器,Host, 物理主机
虚拟主机:
apache服务:
服务于多个不同的站点:
apache:
中心主机
虚拟主机
基于IP
IP1:80
IP2:80
基于端口
IP:80
IP:8080
基于域名
IP:80
主机名不同
www.test.com
www.abc.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"> #定义images目录的使用方法
</Location>
ScriptAlias #使Apache允许执行一个特定目录中的CGI程序
CGI: Common Gateway Interface
得先取消中心主机,注释中心主机的DocumentRoot即可。
虚拟主机的定义:
<VirtualHost HOST>
</VirtualHost>
基于IP,HOST的写法
HOST
IP1:80
IP2:80
基于端口:
HOST
IP:80
IP:8080
基于域名:
*:80
ServerName 不同
设定默认虚拟主机
<VirtualHost _default_:80>
DocumentRoot /www/default80
# ...
</VirtualHost>
<VirtualHost _default_:*>
DocumentRoot /www/default
# ...
</VirtualHost>
<Location /server-status >
SetHandler server-status # 服务器状态 http://www.test.com/server-status 查看
Order Deny,Allow
Deny from all
Allow from .foo.com #拒绝所有,只有foo.com主机可以访问
</Location>
PHP:脚本编程语言,php解释器
webapp: 面向对象的特性
zend:
第一段:词法分析、语法分析、编译为Opcode;
opcode放置于内存中
第二段:执行opcode
php缓存器:
APC
eAccelerator
Xcache
PHP解释器-->mysql
httpd+php:
CGI
Module
FastCGI/fpm
编译安装LAMP环境
httpd:2.4.23
mysql:5.6.33 (rpm,通用二进制,源码)
php:5.6.9
Xcache:3.2.0
httpd-->MySQL-->php -->XCache
httpd:
apr: Apache Portable Runtime #apache2.4需要高版本apr
apr-util
apr-iconv
rpm包:
/bin, /sbin /usr/bin , /usr/sbin
/lib , /usr/lib
/etc
/usr/share/{doc,man}
编译安装:
/usr/local
bin, sbin
lib
etc
share{doc,man}
/usr/local/apr
bin,shbin,lib,incldes ,etc ,share/man
httpd 2.4新特性:
1、MPM可于运行时装载;
--enable-mpms-shared=all --with-mpm=event
2、Event MPM
3、异步读写
4、在每模块及每目录上指定日志级别;
5、每请求配置;<If>, <ElseIf>, <Else>;
6、增强的表达式分析器;
7、毫秒级的KeepAlive Timeout;
8、基于域名的虚拟主机不再需要NameVirtualHost指令;
9、降低了内存占用;
10、支持在配置文件中使用自定义变量;
--enable-modules=most
新增加的模块:
mod_proxy_fcgi
mod_proxy_scgi
mod_proxy_express
mod_remoteip
mod_session
mod_ratelimit
mod_request
等等;
对于基于IP的访问控制
Order allow,deny
allow from all
2.4中不再支持此方法,2.4使用Require user
Require user USERNAME
Require group GRPNAME
Require ip IPADDR #允许访问
Require not ip IPADDR IP #不允许访问
NETWORK/NETMASK
NETWORK/LENGTH
NET
172.16.0.0/255.255.0.0 = 172.16.0.0/16 = 172.16
Require host HOSTNAME
HOSTNAME
DOMAIN
www.amd5.cn
.amd5.com
允许所有主机访问:
Require all granted
拒绝所有主机访问:
Require all deny
php支持扩展功能:
xcache
垃圾回收器
压力测试工具:
ab
http_load
webbench
siege