apache
NCSA , httpd
A Patchy Server =apache
FSF: GUN , GPL
ASF: Apache Software Foundation
web: httpd
tomcat
Hadoop
www.apache.org #官網(wǎng)網(wǎng)址
httpd版本:
Web Server Open source
2.2 , 2.4 , 2.0
httpd:
事先創(chuàng)建進(jìn)程
按需維持適當(dāng)?shù)倪M(jìn)程
模塊設(shè)計(jì),核心比較小,各種功能都模塊添加(包括php)
支持運(yùn)行配置,支持單獨(dú)編譯模塊
支持多種方式的虛擬主機(jī)配置
socket ip:port
虛擬主機(jī):
基于IP的虛擬主機(jī)
基于端口的虛擬主機(jī)
基于域名的虛擬主機(jī)
protocol://HOST:POST/path/to/souce
Method URL version
header
body
GET /download/linux.tar.bz2 HTTP/1.0
Host:www.zhongjima.net
支持https協(xié)議(mod_ssl)
支持用戶認(rèn)證
支持基于IP或主機(jī)名的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: 工作根目錄,相當(dāng)于程序安裝目錄
/etc/httpd/conf:配置文件目錄
主配置文件:httpd.conf
/etc/httpd/conf.d/*conf/etc/httpd/modules:模塊目錄
/etc/httpd/logs --> /var/log/httpd:日志目錄
日志文件有兩類:訪問日志access_log,錯(cuò)誤日志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:
程序:指令和數(shù)據(jù)
數(shù)據(jù),數(shù)據(jù)庫服務(wù)
httpd安裝:yum install -y httpd
directive value
指令不區(qū)分字符大小寫
value 則根據(jù)需要有可能區(qū)分大小寫
loadRunner 模擬真實(shí)測試軟件
MPM:Multi Path Modules
mpm_winnt #windows服務(wù)器
prefork #(一個(gè)請求用一個(gè)進(jìn)程響應(yīng))預(yù)先生成進(jìn)程(prefork,多進(jìn)程模式,1個(gè)進(jìn)程服務(wù)于1個(gè)用戶請求,成本比較高。但是,穩(wěn)定性最高,不需要支持線程安全。)
<IfModule prefork.c>
StartServers 8 # 服務(wù)啟動(dòng),啟動(dòng)多少個(gè)空閑進(jìn)程
MinSpareServers 5 #最少多少個(gè)空閑進(jìn)程
MaxSpareServers 20 #最大空閑進(jìn)程
ServerLimit 256 #最大進(jìn)程數(shù)
MaxClients 256 # 最多多少個(gè)進(jìn)程同時(shí)訪問
MaxRequestsPerChild 4000 #一個(gè)子進(jìn)程最多響應(yīng)多少請求
</IfModule>
worker #(一個(gè)請求用一個(gè)線程響應(yīng)(啟動(dòng)多個(gè)進(jìn)程,每個(gè)進(jìn)程生成多個(gè)線程))(多線程(worker,多進(jìn)程多線程模式,1個(gè)進(jìn)程含有多個(gè)worker線程,1個(gè)worker線程服務(wù)于1個(gè)用戶請求,因?yàn)榫€程更輕量,成本比較低。但是,在KeepAlive場景下,worker資源會被client占據(jù),無法響應(yīng)其他請求(空等待))
<IfModule worker.c>
StartServers 4 # 服務(wù)啟動(dòng)以后啟動(dòng)進(jìn)程數(shù)
MaxClients 300 # 最多同時(shí)運(yùn)行多少個(gè)請求
MinSpareThreads 25 # 最小空閑線程
MaxSpareThreads 75 #最大空閑線程
ThreadsPerChild 25 #每個(gè)進(jìn)程生成多少個(gè)線程
MaxRequestsPerChild 0 #每個(gè)子進(jìn)程運(yùn)行最大連接數(shù)
</IfModule>
event # (一個(gè)進(jìn)程處理多個(gè)請求)
<IfModule mpm_event_module>
StartServers 3 #服務(wù)啟動(dòng)以后啟動(dòng)的進(jìn)程數(shù)
MinSpareThreads 75 #最小空閑線程
MaxSpareThreads 250 #最大空閑線程
ThreadsPerChild 25 #每個(gè)進(jìn)程生成多少個(gè)線程
MaxRequestWorkers 400 #最大請求數(shù)
MaxConnectionsPerChild 0 #每個(gè)子進(jìn)程運(yùn)行最大連接數(shù),
</IfModule>
httpd命令:
-l:查看支持的模塊
-M : 查看支持額外的模塊
-t:查看配置文件語法錯(cuò)誤
URL路徑跟本地文件系統(tǒng)路徑不是一碼事兒,URL是相對于DocumentRoot
Options
none:不支持任何選項(xiàng)
Indexes:運(yùn)行索引目錄
FollowSynlinks:允許訪問符號鏈接指向的原文件
Includes:允許執(zhí)行服務(wù)端包含(SSI)
ExcCGI:允許運(yùn)行CGI腳本
MultiViews:根據(jù)來自地域,顯示不同語言的頁面
ALL :執(zhí)行所有選項(xiàng)
Order :用于定義基于主機(jī)的訪問功能,IP,網(wǎng)絡(luò)地址或主機(jī)定義訪問控制機(jī)制(Apache2.4不支持allow,deny機(jī)制)
Order allow,deny #后面是默認(rèn)選項(xiàng)
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:認(rèn)證訪問
AllowOverride AuthConfig(AuthConfig基于文件中的用戶名密碼認(rèn)證訪問)
AuthType Basic #(Basic基本認(rèn)證類型)
AuthName "Restricted Files" #提示信息
AuthUserFile "/usr/local/apache/passwd/passwords" #認(rèn)證用戶文件
htpasswd命令:
-c :首次創(chuàng)建
-m:md5加密
-D:刪除用戶
htpasswd -c -m /etc/httpd/conf/htpaswwd tom
AuthGroupFile "/usr/httpd/conf/htgroup" #認(rèn)證組文件
Require user tom #允許tom 用戶登錄(Require valid-user 允許文件中所有用戶登錄)
Require group myusers # 允許myusers組訪問,(此時(shí)Require user可以省略)
#vim htgroup
myusers: tom hadoop
Alias:路徑別名
Alias /luntan/ "/www/bbs/" #http://www.test.com/luntan 即可訪問/www/bbs/里面的內(nèi)容
虛擬主機(jī)
HTTPS
PHP+MySQL
apache虛擬主機(jī):
apache: 服務(wù)器,Host, 物理主機(jī)
虛擬主機(jī):
apache服務(wù):
服務(wù)于多個(gè)不同的站點(diǎn):
apache:
中心主機(jī)
虛擬主機(jī)
基于IP
IP1:80
IP2:80
基于端口
IP:80
IP:8080
基于域名
IP:80
主機(jī)名不同
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 #定義錯(cuò)誤日志
CustomLog #定義訪問日志
<Location "/images"> #定義images目錄的使用方法
</Location>
ScriptAlias #使Apache允許執(zhí)行一個(gè)特定目錄中的CGI程序
CGI: Common Gateway Interface
得先取消中心主機(jī),注釋中心主機(jī)的DocumentRoot即可。
虛擬主機(jī)的定義:
<VirtualHost HOST>
</VirtualHost>
基于IP,HOST的寫法
HOST
IP1:80
IP2:80
基于端口:
HOST
IP:80
IP:8080
基于域名:
*:80
ServerName 不同
設(shè)定默認(rèn)虛擬主機(jī)
<VirtualHost _default_:80>
DocumentRoot /www/default80
# ...
</VirtualHost>
<VirtualHost _default_:*>
DocumentRoot /www/default
# ...
</VirtualHost>
<Location /server-status >
SetHandler server-status # 服務(wù)器狀態(tài) http://www.test.com/server-status 查看
Order Deny,Allow
Deny from all
Allow from .foo.com #拒絕所有,只有foo.com主機(jī)可以訪問
</Location>
PHP:腳本編程語言,php解釋器
webapp: 面向?qū)ο蟮奶匦?/span>
zend:
第一段:詞法分析、語法分析、編譯為Opcode;
opcode放置于內(nèi)存中
第二段:執(zhí)行opcode
php緩存器:
APC
eAccelerator
Xcache
PHP解釋器-->mysql
httpd+php:
CGI
Module
FastCGI/fpm
編譯安裝LAMP環(huán)境
httpd:2.4.23
mysql:5.6.33 (rpm,通用二進(jìn)制,源碼)
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可于運(yùn)行時(shí)裝載;
--enable-mpms-shared=all --with-mpm=event
2、Event MPM
3、異步讀寫
4、在每模塊及每目錄上指定日志級別;
5、每請求配置;<If>, <ElseIf>, <Else>;
6、增強(qiáng)的表達(dá)式分析器;
7、毫秒級的KeepAlive Timeout;
8、基于域名的虛擬主機(jī)不再需要NameVirtualHost指令;
9、降低了內(nèi)存占用;
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.zhongjima.net
.amd5.com
允許所有主機(jī)訪問:
Require all granted
拒絕所有主機(jī)訪問:
Require all deny
php支持?jǐn)U展功能:
xcache
垃圾回收器
壓力測試工具:
ab
http_load
webbench
siege