kangle配置文件
(重定向自Kangle配置文件)
目錄
[隱藏]
- 1配置文件介紹
- 2重新加載配置文件
- 3config
- 3.12request_queue
- 3.13tempfile
- 3.14max_post_size
- 3.15buffer
- 3.16path_info
- 3.17cache(緩存)
- 3.18async_io
- 3.19access_log(全局訪問日志)
- 3.20access_log_handle
- 3.21log_handle_concurrent
- 3.22log(全局日志)
- 3.23server_software
- 3.24hostname
- 3.25worker_io(IO工作者)
- 3.26worker_dns
- 3.27admin(web管理)
- 3.28server(服務器擴展)
- 3.29api(api擴展)
- 3.30cgi(cgi擴展)
- 3.31cmd(命令擴展)
- 3.32vhs(虛擬主機全局)
- 3.33vh(虛擬主機)
配置文件介紹
- kangle采用xml的形式,做為配置文件,並支持配置目錄(即目錄搜索的方式).kangle 3.1中支持平滑的重新加載配置文件,除少數幾個配置項(運行用戶,服務器簽名,磁盤緩存目錄,工作線程)需要重新啟動才能生效,所有配置都可以平滑加載,程序友好。也支持web操作界面,人機友好。
- kangle的主配置文件為etc/config.xml,在3.1.1以前虛擬主機相關配置放在etc/vh.xml。3.1.1已經統一為單一配置文件。
- kangle支持的配置文件目錄是ext目錄,即kangle/ext目錄下面所有的文件,kangle都會當做配置文件加載並解析。
- 配置文件編碼,統一采用utf-8編碼。
重新加載配置文件
- 我們提供了命令行的方式重新加載所有配置文件.
kangle -r
- 可以在3311里面點重新加載配置文件
- 也支持編程接口的調用:reload
config
配置文件頂層標簽,其它指令都在config之下。
<?xml version="1.0" encoding="utf-8"?>
<config>
其它指令
</config>
request和response(配置訪問控制)
配置訪問控制,請參考kangle訪問控制
listen(端口配置)
配置靜態偵聽端口。 語法:
<listen
ip='*'
port='端口'
type='http|https|manage|manages'
certificate='證書文件地址'
certificate_key='key文件地址'
sni='1'
/>
- type 可為http,manage,https,manages
- certificate certificate_key sni只有type為https和manages時才需要
- sni 是指支持虛擬主機ssl證書,要openssl和瀏覽器都支持,才有效。目前已知的是centos 5是不支持,ie 6也不支持。
例只偵聽ipv4的80端口
<listen ip='0.0.0.0' port='80' type='http' />
只偵聽ipv6的80端口
<listen ip='::' port='80' type='http' />
指定ip
<listen ip='127.0.0.1' port='80' type='http' />
偵聽ssl
<listen
ip='*'
port='443'
type='https'
certificate='證書文件地址'
certificate_key='key文件地址'
sni='1'
/>
run(unix系統設置kangle運行用戶)
unix系統設置kangle工作進程運行用戶。
<run user='用戶名' group='組名'/>
- 用戶名可用#uid,組名可用#gid。
- 必須要用root身份啟動
- kangle的var目錄,tmp目錄,對運行用戶要有寫的權限。etc/config.xml文件也要有寫的文檔,如果你使用web管理。
使如設置運行在kangle用戶下。
<run user='kangle' group='kangle'/>
lang(語言)
設置3311管理用的語言 使用中文
<lang>zh_CN</lang>
指明英語
<lang>en_US</lang>
keep_alive(http長連接)
設置http長連接超時時間,單位秒,設置為0,則禁用http長連接(不建議).
<keep_alive>30</keep_alive>
connect_timeout(連接超時connect time out)
設置連接超時時間,單位秒
<connect_timeout>11</connect_timeout>
keep_alive_count(長連接過載保護)
長連接數默認是2000(可以根據需要修改,如:200),新版加了這個參數,有效實現過載保護,連接數一超,就采用短連接。舊版沒有這個設置,連接數高,還是保持長連接,導致負載太高。
<keep_alive_count>2000</keep_alive_count>
timeout(超時)
設置讀寫超時時間,單位秒,不能低於5秒,最好不超過120秒。
<timeout>30</timeout>
min_free_thread
設置回收空閑線程時,最小保留值。設置為0,不保留。
<min_free_thread>0</min_free_thread>
gzip(gzip壓縮)
設置gzip壓縮
<gzip only_gzip_cache='0' min_gzip_length='256' gzip_level='5'/>
- only_gzip_cache 是否僅壓縮可以緩存的網頁。1表示僅壓縮能緩存的網頁(一般是靜態文件),0表示全部壓縮,包括動態網頁
- min_gzip_length 最小壓縮大小。如果網頁太小,壓縮只會浪費cpu.毫無意義。
- gzip_level 壓縮級別(1-9),建議設置為5,數字越大,壓縮率越高,相應的耗的cpu就會越多。
connect(連接數)
設置連接數
<connect max_per_ip='0' max='0' />
- max_per_ip 設置每ip最大連接數,0表示不限制。
- max 設置總共最大連接數,0表示不限制。
per_ip(特殊ip段連接數)
設置特殊ip段的每ip連接數限制,在connect標簽下面(3.1.1版本以上)。
<connect max_per_ip='0' max='0'>
<per_ip src='ip段' max='連接數'/>
<per_ip .../>
</connect>
- ip 段為cidr格式。如192.168.1.1,192.168.1.0/24
- max 每ip連接數,0為不限制,deny為拒絕連接
例,設置192.168.0.0/24每ip連接數不限,10.0.0.0/8,拒絕連接,其它ip的連接數設置為20,如下配置。
<config>
<connect max_per_ip='20' max='0'>
<per_ip src='192.168.0.0/24' max='0'/>
<per_ip src='10.0.0.0/8' max='deny'/>
</connect>
</config>
request_queue
設置全局請求隊列
<request_queue max_worker='8' max_queue='100'/>
- max_worker 最大工作者,所有工作者忙時,會放入隊列。
- max_queue 最多隊列,0表示不限制
- 對於緩存和靜態文件,不會占用請求隊列。僅代理和動態請求才會占用請求隊列。
- kangle會采用兩種策略拋棄當前的請求,直接回應503服務器忙,一個是請求隊列超過了max_queue設置的數,一個是請求隊列等待的時間超過超時時間(timeout設置)。
tempfile
設置是否使用臨時文件交換數據
<tempfile>1</tempfile>
如設置使用內存交換
<tempfile>0</tempfile>
- 用於反向代理,建議設置為使用內存交換,否則碰到很大的下載,反應很慢。
- 用於本地應用,如fastcgi連php,建議設置臨時文件,及大的改善后端壓力。
- kangle 3.1中在訪問控制中如果使用了temp_file標記模塊指定數據交換,以訪問控制中為准
max_post_size
設置最大post數據,僅對采用臨時文件交換數據才有作用
<max_post_size>8M</max_post_size>
buffer
設置數據緩沖區大小
<buffer>32K</buffer>
不建議低於8K
path_info
設置是否啟用path info的支持
<path_info>1</path_info>
- 0不啟用,1啟用,建議啟用,如果確切知道不用該功能,可設置為0,提高點性能。
- 所謂path info是指 http://www.kanglesoft.com/test.php/a/b 這樣形式的訪問。
cache(緩存)
設置緩存
<cache
default='1'
max_cache_size='1M'
max_bigobj_size='1G'
memory='10M'
disk='10G'
disk_dir='d:\test\'
disk_work_time='* 1-6 * * *'
refresh_time='60'
/>
- default 是否默認緩存,0或1,建議設置為1
- max_cache_size 普通緩存最大緩存網頁
- max_bigobj_size 智能緩存最大緩存網頁(商業版功能)
- memory 內存緩存總大小
- disk 磁盤緩存總大小
- disk_dir 磁盤緩存目錄(該目錄要格式化為緩存目錄)
- disk_work_time 磁盤清理和掃描時間(格式同crontab),不設置為即時工作,* 1-6 * * * 表示,每天早上1到7點工作,對於高io負載時建議這樣設置。
- refresh_time 默認緩存時間(即沒有指定max_age時,緩存時間),單位秒
async_io
設置是否使用異步IO
<async_io>1</async_io>
- 0表示不啟用異步IO,1表示啟用異步IO
access_log(全局訪問日志)
設置全局訪問日志文件
<access_log>var/access.log</access_log>
- 如果文件名不是絕對路徑,則以kangle安裝目錄為當前目錄
- 設置為/nolog則禁用訪問日志。
access_log_handle
設置訪問日志處理,每次kangle翻轉訪問日志時自動調用該命令對日志進行處理
<access_log_handle><![CDATA[/vhs/kangle/bin/webalizer -F clf -p -Q -o ${log_dir}/../webalizer/ ${log_file}]]></access_log_handle>
- 以上是使用webalizer做日志分析的一個例子
- ${log_dir}表示日志目錄
- ${log_file}表示日志文件
以下給個linux下壓縮日志的例子
<access_log_handle>/usr/bin/gzip ${log_file}</access_log_handle>
log_handle_concurrent
設置訪問日志處理時,最多並發進程數
<log_handle_concurrent>2</log_handle_concurrent>
log(全局日志)
設置全局日志信息
<log
level='3'
rotate_time='0 0 * * *'
rotate_size='100M'
error_rotate_size='100M'
logs_day='30'
logs_size='500M'
log_handle='1'
/>
- level 表示錯誤日志(var/server.log)記錄級別,0-5,數字越大,記錄的信息越多。建議為3
- rotate_time 全局日志翻轉時間,格式同crontab, 0 0 * * * 表示每天0點翻轉日志.
- rotate_size 全局日志按大小翻轉,單個日志超過這個大小就翻轉。
- rotate_time和rotate_size可選一個,或者兩個都寫。
- logs_day 總日志保存時間,單位天。kangle會把超過這個天數的文件自動刪除,所以日志目錄切不能設置為有重要文件的目錄。
- logs_size 總日志大小,按大小計算,刪除舊的日志文件。
- log_handle 是否使用access_log_handle處理,為1時處理,0時不處理。
server_software
設置服務器簽名。
<server_software>簽名</server_software>
如:
<server_software>httpd/2.2</server_software>
hostname
設置服務器名字,用於出錯時,附加到錯誤信息上,方便定位出錯。格式:
<hostname>服務器名</hostname>
worker_io(IO工作者)
設置io最大工作者.
<worker_io>10</worker_io>
- 對於磁盤交換IO,和異步IO,kangle會建立一個工作隊列,由worker_io指定一個最大工作者,超過的排隊。請設置合理數字,可降低系統IO爆發的壓力。
- 設置0不限制。
worker_dns
admin(web管理)
設置web管理訪問授權(默認是3311端口)
<admin
user='admin'
password='d4b4180809b577da4cadeecb4cd31b67'
crypt='md5'
auth_type='Basic'
admin_ips='127.0.0.1|*'
/>
- user 登錄用戶名
- password 密碼
- crypt 密碼類型,可選md5,plain,md5表示password是md5加密過的,plain表示是明文
- auth_type http認證類型,可選Basic,Digest
- admin_ips 允許ip訪問,由|分開,*表示全部ip
例:
<admin
user='admin'
password='kangle'
crypt='plain'
auth_type='Basic'
admin_ips='127.0.0.1|*'
/>
server(服務器擴展)
定義一個服務器擴展:
單節點
<server name='kangle' proto='http' host='192.168.1.1' port='80' life_time='0' />
- name 名字
- proto 協議,可選: http,fastcgi,ajp,uwsgi,scgi,hmux
- 常見proto,反向代理協議用http,連接php用fastcgi,連接tomcat,jboss用ajp,連接uwsgi跑的python用uwsgi,連接python支持的scgi用scgi,resin用hmux
- host ip地址
- port 端口號
- life_time 長連接時間,設置為0,禁用長連接。
多節點
<server
name='tests'
proto='http'
ip_hash='1'
cookie_stick='1'
error_try_time='30'
max_error_count='5'
>
<node weight='1' host='192.168.1.1' port='80' life_time='0' />
<node weight='1' host='192.168.1.2' port='80' life_time='0' />
</server>
- name,proto和單節點一樣
- ip_hash 是否使用ip_hash選擇節點。
- cookie_stick 是否使用cookie粘着,選擇節點。可和ip_hash單獨使用,也可一起使用。
- error_try_time 錯誤重試時間,一但某個節點被判斷為壞節點時,過多久,再重新測試。單位秒。
- max_error_count 連續錯誤次數超過設置值,就會被kangle認為是壞節點,而從節點中摘除,直到重新測試為能連通為止
- node定義節點,可以為多個
- weitht 定義節點的重量,重量越大,使用該節點的次數就越多。為0,為備份節點,只有所有非備份節點全壞時,才使用備份節點。
- host,port,life_time和單節點一樣。
api(api擴展)
定義api擴展,api兼容isapi.為動態鏈接庫文件,windows為dll,linux為so。
<api name='asp' file='bin/kasp.dll' type='sp' life_time='60'>
</api>
- type為api加載類型,可選值為sp和mt
- sp由kangle工作進程加載,不獨立進程,又叫進程內api
- mt由extworker程序加載,獨立工作進程,又叫進程外api.
- sp的性能比mt的性能高,但mt的穩定性比sp高,如果api有bug,會導致加載的進程出問題。
cgi(cgi擴展)
定義cgi擴展,cgi公共網關接口,有關cgi請參考: http://baike.baidu.com/view/369917.htm
<cgi name='php' cmd='/usr/bin/php-cgi' arg='參數' env='環境變量' env_split='|' />
- name cgi名字
- cmd 執行程序
- arg 參數(多個參數由空格分開) %s表示執行腳本文件。
- env 環境變量,多個環境變量由|分開,如a=1|b=2
- env_split 多個環境變量分割符,默認是|
- cgi是一種性能低下的擴展,每次執行都要啟動一個新的進程,所以盡量避免使用。
cmd(命令擴展)
vhs(虛擬主機全局)
設置虛擬主機全局的一些配置,位於config標簽下。
<vhs error_404='/404.html'>
其它指令
</vhs>
- error_錯誤代碼 設置全局自定義錯誤頁面,目前僅404和403可設置。
index(默認文件)
設置默認文件(可放在vhs和vh下面)
<index file='index.php'/>
- index 可在vhs標簽下,也可在vh下面,分別設置全局和指定虛擬主機的默認文件。
map(擴展映射)
擴展映射,可在vhs和vh標簽下。格式:
文件擴展名映射
設置按文件擴展名映射
<map file_ext='asp' extend='api:asp' allow_method='*' confirm_file='1' />
- file_ext 文件擴展名
- extend 擴展,格式是擴展類型:名字,擴展類型有api,cgi,server,cmd,或者是沒有名字,直接為cgi,ssi
- allow_method 允許方法,多個方法用逗號分割。如GET,POST *表示全部
- confirm_file 確認文件存在(0或1),默認為1,如為1時,文件存在,kangle才交給擴展處理,否則直接404,為0時kangle不確認。
按路徑映射
按url的path來映射擴展
<map path='/' extend='擴展' allow_method='*' confirm_file='0'/>
- path 為url的path,如開頭為~的,則用正則匹配,否則只匹配前面部分。如:
<map path='~\.php$' extend='server:php' allow_method='*' confirm_file='1'/>
- 其它參數同文件擴展名映射一樣。
alias(別名)
設置虛擬主機別名,可在vhs和vh標簽下。格式:
<alias path='url路徑' to='物理路徑' internal='0或1'/>
- path為url的路徑,如:/abc/
- to為物理路徑,如:d:\kangle\www\
- internal 是否為內部請求,默認是0,如為內部請求,則只有內部請求才有效。
例:
<alias path='/aa/' to='D:\project\kangle\www\'/>
mime_type(mime類型)
設置mime類型,可在vhs和vh標簽下。格式:
<mime_type ext='文件擴展名' type='mime類型' gzip='0或1' max_age='緩存時間(秒)'/>
- ext 文件擴展名,*表示默認mime類型
- gzip 是否壓縮,1表示壓縮,0不壓縮(由訪問控制確定是否壓縮)
- max_age 緩存時間,如果不寫或為0,由全局設置的緩存的時間為准(cache下的refresh_time),但訪問控制的設置可覆蓋本設置。
例:
<mime_type ext='html' type='text/html' gzip='1'/>
vh(虛擬主機)
定義一個虛擬主機,在config標簽下。
<vh
name='名字'
doc_root='路徑'
log_file='獨立日志'
log_rotate_time='0 0 * * *'
log_rotate_size='100m'
inherit='on或off'
user='運行用戶'
group='運行組'
password='密碼'
app='1'
ip_hash='1'
app_share='0或1或2'
browse='on或off'
access='自定義訪問文件'
htaccess='htaccess文件名'
concat='0或1'
max_connect='100'
speed_limit='10240'
fflow='1'
max_worker='10'
max_queue='0'
certificate='ssl證書文件'
certificate_key='ssl證書key文件'
status='狀態'
>
其它指令
</vh>
- name 虛擬主機的名字,不可重復,由字母和數字組成
- doc_root 虛擬主機家目錄
- log_file 獨立日志,如果不是絕對地址,則以虛擬主機家目錄為當前目錄。
- log_rotate_time 日志翻轉時間,格式同crontab
- log_rotate_size 日志翻轉大小。
- inherit 是否繼承全局的設置,on為繼承,off不繼承,繼承自定義錯誤,擴展映射(map),默認首頁(index),別名(alias)設置。如有沖突,則以虛擬主機的設置的為准,即可覆蓋全局設置。
- user 運行用戶,unix下可以為用戶名或#uid.
- group 運行用戶,unix下用,windows不用。可為#gid
- password 用戶密碼,windows下用,unix不用。
user,group,password 這個運行身份,僅對擴展cmd和cgi且kangle進程要以超級用戶運行才有效。即要啟動子進程服務時的一個運行身份。
- app 應用程序池數量,對於無多進程的擴展,如進程外api擴展和單進程的cmd擴展。設置app,可啟動多個子進程。其它的情況,請設置為1.
- ip_hash 對於app大於1的情況下,啟用ip_hash有助於鎖定子進程和ip關連。而不置於用戶在各個應用程序池之間來回切換。app為1時,此值無意義。
- app_share 應用程序池共享模式,有0,1,2三種取值,0為獨享,1為相同運行用戶共享,2為全局共享。建議取值為1.默認為0。
- browse 是否允許瀏覽模式,取值為on或off,對於一個目錄下沒有默認文件,如果為on,則列出該目錄下所有文件和子目錄,否則顯示403錯誤。默認為off.
- access 自定義的訪問控制文件名,為空不支持。取值為-,為內置模式,即訪問控制部分配置包含在vh標簽下。,默認為空不支持。
- htaccess 兼容apache的htaccess文件名,為空不支持apache的.htaccess。目前kangle部分兼容了apache的.htaccess重寫指令。默認為空不支持。
- concat 是否允許組合請求模式,0不支持,1支持組合請求,默認為0。
- max_connect 最大連接數,0不限制,默認為0
- speed_limit 帶寬限制,單位字節/秒,0不限制,默認為0
- fflow 是否流量統計 0或1,默認為0
- max_worker 最大工作者,為0,使用全局最大工作者,默認為0
- max_queue 最大隊列,為0不限隊列大小,默認為0.
- certificate ssl證書文件,可為絕對路徑和相對路徑,如為相對路徑則以虛擬主機的doc_root為當前目錄。
- certificate_key ssl證書key文件,可為絕對路徑和相對路徑,如為相對路徑則以虛擬主機的doc_root為當前目錄。
- status 狀態,為0正常,非0,所有訪問顯示503.默認為0。
host(域名綁定)
綁定域名,在vh標簽下,格式:
<host dir='子目錄>域名</host>
- dir為子目錄,也可以為http://ip:port/ 表示反向代理。擴展閱讀kangle反向代理.
- 域名可為*,表示所有域名。或 *.abc.com,表示泛域名。
- 綁定多個域名,可以有多個host.
例:
<host>*</host>
<host dir='www'>abc.com</host>
bind(ip端口綁定)
綁定到指定ip或端口上(3.1版本),在vh標簽下。格式:
<bind>!ip:port</bind>
- ip可以為*,表示所有ip,或為0.0.0.0表示所有ipv4的ip,或::表示所有ipv6的ip,或指定一個ip.
- port 端口,如以s結尾,由表示是ssl端口,如443s,但要配置虛擬主機的ssl證書和key文件。
- bind可以有多個,表示一個虛擬主機綁定到多個端口上。
- 如果一個vh沒有一個bind,則會綁定到所有已經打開的端口。但優先級會低於指定綁定的虛擬主機。
例:綁定到80端口和443 ssl端口
<vh 其它配置>
<bind>!*:80</bind>
<bind>!*:443s</bind>
</vh>
index,map,alias,mime_type
vh下的index,map,alias,mime_type請參考vhs下的index,map,alias,mime_type