kangle配置支持xml格式的配置文件,主配置文件为etc/config.xml,可以在ext目录放置多个配置文件,支持多文件配置.
属性指xml元素的属性,如<img src='a.gif'/>其中src就是img其中之一属性。文本内容指xml元素的文本内容,如<sex>female</sex>其中female就是sex的文本内容子元素如<person><name>abc</name></person>其中name就是person的子元素
在多个配置文件存在时,可以在配置文件的第一行设置加载顺序.格式:
<!--#start xxx -->
其中xxx为顺序号数字,数字越小越先加载,主配置文件加载顺序为100。
config为根元素,所有xml配置必须在<config></config>之中。
文本内容设置工作线程数.必须是2的n次方,默认是0,自动根据cpu数量调整。
侦听端口,有如下属性:
ip侦听ip,如*,127.0.0.1port端口type类型,可以有httphttpsmanagemanagestcptcps
http/https,端口为http服务。manage/manages,端口为管理端口。tcp/tcps,端口为tcp四层转发
当
type为httpsmanagestcps时,可以设置如下ssl属性
certificatessl公钥certificate_keyssl私钥cipherssl算法protocolsssl协议http2是否支持http2(0或1)http3是否支持http3(0或1)early_data是否支持early_datareject_nosni是否拒绝无sni的请求(0或1),注意此配置仅在listen中有效。
例如:
<listen certificate='etc/server.crt' certificate_key='etc/server.key' cipher='' http2='1' ip='127.0.0.1' port='443' protocols='' reject_nosni='1' type='https'/>
配置缓存,kangle支持内存和磁盘两级缓存,也支持普通和智能缓存,智能缓存是指kangle缓存部分内容,可以合并多个部分缓存。
属性:
default默认是否缓存(0或1)memory内存缓存大小,可以带单位KMGdisk磁盘缓存大小,可以带单位KMG,磁盘缓存在使用前需要格式化缓存目录.disk_dir磁盘缓存目录,如为空,则表示主目录下cache目录。refresh_time默认缓存时间,单位秒.max_cache_size单个普通缓存文件大小,可以带单位KMG,如超过则开启智能缓存(中断了也可以缓存部分)。max_bigobj_size单个最大智能缓存文件大小,可以带单位KMG,如超过将不缓存,一般的max_bigobj_size要大于max_cache_sizecache_part是否缓存部分内容(0或1),默认是开启1.disk_work_time磁盘缓存清理时间,格式同crontab,可以设置一个时间段,用于集中清理磁盘缓存。
例如:
<cache cache_part='1' default='1' disk='1g' max_bigobj_size='1g' max_cache_size='256k' memory='1G' refresh_time='30'/>
协程相关设置,属性:
stack_size协程堆栈大小,
ssl发起连接时相关设置,属性:
ca_pathCA目录chiperssl算法设置protocolsssl协议设置
运行身份设置,如果设置了run_as必须以超级用户身份启动kangle,否则无法切换,属性:
user运行用户group运行组
设置dns解析工作者数,属性:
worker工作者数
磁盘io相关设置
worker最大工作者数,0不限制max最大io并发数,0不限制,超过此数将拒绝buffer一次读写的buffer数。
配置超时时间,属性:
rw读写超时时间,单位秒。默认60秒。connect连接超时时间,单位秒,如缺失则同rw一样。
压缩配置,属性:
min_length最小压缩大小,对于已知大小的并且小于该值的,将不会压缩.only_cache是否只压缩可以被缓存的网页(0或1),设置为1动态的将不压缩,默认是0.gzip_levelgzip压缩级别,设置为0,不使用gzip压缩.br_levelbr压缩级别,设置为0,不使用br压缩zstd_levelzstd压缩别,设置为0,不使用zstd压缩
连接相关配置,属性:
max最大连接数,默认是0不限制,超过则拒绝新连接。max_per_ip每ip最大连接数,默认是0不限制,超过则拒绝该ip的新连接。per_ip_deny超过max_per_ip时,是否加入黑名单(0或1),默认是0。max_keep_alive最大长连接数,超过则使用短连接。
设置控制台http认证信息,即listen为manage和manages的服务。
属性:
user用户名password密码admin_ips允许ip,多个ip用|分割,可以用*代表所有。auth_typehttp认证类型,可以是Basic或Digest
日志设置,属性:
access访问日志文件.level日志级别,级别越大,记录信息越多,默认是2rotate_time访问日志翻转时间,格式同crontabrotate_size访问日志翻转大小,可以带单位KMGlogs_day总共保存日志天数。logs_size总共保存日志大小。error_rotate_size错误日志翻转大小,可以带单位KMGradio如果日太多,可以抽样,比如3抽1,radio就写3.
定义上游服务,包含单节点服务和多节点服务。带属性 host,即是单节点服务,共有属性:
name指示服务名称。
属性:
host格式:ip:port,port可以带s,表示是ssl端口。proto协议,支持http,fcgi,ajp,tcplife_time长连接时间,如果设置为0,则不使用长连接。self_ip连接服务,使用本机ip,在多ip时有用。
属性:
url_hash0或1,根据url进行hash,选择节点.ip_hash0或1,根据访问者ip进行hash,选择节点.cookie_stick0或1, 使用cookie黏着,确保相同的节点服务某个客户,对一些session会话保持有用。max_error_count最多错误次数,对于某一节点,如果连接错误达到该值,将被临时下线。error_try_time对于临时下线的节点,每过多少秒重新测试节点是否健康。
子元素 用于定义节点:
属性:
weight权重,对于多个节点可以设置不同的权重。- 其他属性参考,单节点
定义命令扩展,属性:
name指示服务名称。proto协议,支持http,fcgi,ajp,tcplife_time长连接时间,单位:秒,如果设置为0,则不使用长连接。idle_time空闲时间,单位:秒,超过此时间,将关闭相应进程。max_request最多请求数,超过此设置,将关闭进程。max_error_count最多错误次数,对于某一节点,如果连接错误达到该值,将关闭进程。file程序文件名param程序参数type命令扩展类型,sp表示单进程多线程,mp表示多进程单线程。porttcp端口号,对于fastcgi协议的,port设置为0。worker工作者数量,对于type是mp的情况,可以指定进程数。
子元素:
环境变量,属性用于变量名。
pre_event用于在启动进程前,用于执行批处理,post_event用于启动后执行。
加载dso扩展,属性:
name扩展名filenamedso文件- 其他属性用于各自dso使用。
request请求控制,response为回应控制 每一个请求进来时,从request中的BEGIN表中开始匹配规则目标,直接有命中为止,如没有匹配,则使用request的默认目标每一个请求回应之前,从response中的BEGIN表中开始匹配规则目标,直接有命中为止,如没有匹配,则使用response的默认目标
request和response可以定义 action 属性为默认目标,action可以为:
deny拒绝allow接受request中可以为server:名称反向代理到名称
子元素:
定义命名模块,命名模块可以在acl和mark中引用
属性:
name模块id名字,要求唯一module模块类型名称- 各模块其他属性
table用于定义控制表,name属性指示唯一的名称,其中名称BEGIN为开始的默认表,POSTMAP在response中映射完物理路径后开始匹配规则的默认表。
子元素:
规则链,属性 action 指示 目标,子元素:
定义匹配模块和标记模块,可以是引用named_acl和named_mark命名的模块,也可以定义匿名模块.
ref属性用于引用命名模块,如没有则定义匿名模块,其中module指示模块类型名称or0或1,默认是0,1表示和下一个匹配是逻辑或的关系,否则是逻辑与.revers0或1,表示逻辑非,用于逻辑反转.- 其他属性用于各模块其他属性。 参考acl和mark.
虚拟主机全局配置,有如下子元素:
默认文件,属性 file 设置文件名。
错误代码映射,属性:
code错误代码,如403404file文件
文件扩展名类型,属性:
ext文件扩展名,如htmltype文件类型,如:text/htmlcompress设置压缩(0,1,2),0表示不明,1表示压缩,2表示永不压缩。默认是0。max_age缓存时间,
别名设置,属性:
path目录to别名路径,注意不可以使用绝对路径(以/开头)internal是否是内部别名(0或1),默认是0,当别名是内部时,仅内部可见。
基于文件扩展名匹配扩展,看采用何种方式处理请求。属性:
ext文件扩展名extend扩展,格式是扩展类型<: 扩展名>,扩展类型可以是:
server单节点或多节点上游服务器。cmdcmd扩展dsodso扩展default默认,当静态文件直接发送。无扩展名。
confirm_file是否确认文件存在,0表示不确认,1表示确认存在,2表示确认不存在。默认是0不确认。allow_method允许方法,*表示所有。多个方法用,隔开。如GET,POST
基于路径的匹配扩展,看用何种方式处理请求。属性:
path路径名extendconfirm_fileallow_method同map_file
配置虚拟主机,有如下属性:
name虚拟主机名称,要求唯一。doc_root主目录,可以是绝对地址,也可以是相对地址。browse是否浏览(0或1,默认0),当url是目录时,没有默认首页时,是否列出文件和目录。inherit是否继承(0或1,默认0),是否继承全局vhs的属性设置index,error,mime_type,alias,map_file,map_path。user运行用户group运行组,如果是windows系统,则表示user的密码。speed_limit限速大小. 可以带单位K,M,Gmax_connect最大连接数status状态,0是正常,其他表示已经关闭。max_worker,max_queue设置最大工作者和最大等待队列.fflow是否开启流量统计(0或1,默认0)log_file访问日志文件log_rotate_time访问日志翻转时间,格式同crontablog_rotate_size访问日志翻转大小,可以带KMG单位logs_day访问日志保存天数logs_size访问日志总大小certificate,certificate_key,cipher,protocols,early_data,http2,http3等ssl相关属性可以参考ssl相关属性
vh还有有如下子元素:
绑定域名,可以有属性``dir表示子目录。
文本内容设置域名。
如:
<host dir='abc'>www.abc.com</host>
绑定www.abc.com域名到abc子目录
绑定到端口,文本内容设置端口格式为:ip:port,ip可以设置为*表示所有,0.0.0.0表示ipv4,::表示ipv6.
port可以加s,t等后缀,s表示ssl端口。t表示tcp端口。
如:
<bind>*:443s</bind>
表示绑定到443的ssl端口。
参考vhs
参考全局request和response