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:m.maowutv.com
支持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
m.maowutv.com
.amd5.com
允許所有主機訪問:
Require all granted
拒絕所有主機訪問:
Require all deny
php支持擴展功能:
xcache
垃圾回收器
壓力測試工具:
ab
http_load
webbench
siege


