include <配置文件名>;
解析JSon内容时,如果遇到include指令,就将include指令后面的文件内容加载到当前指令位置,作为当前文件内容的一部分,进行解析处理。
2.2.3 单行注释和多行注释
为了增加配置文件中代码的可读性,需要对相关的定义添加详细说明、注解等内容,方便使用人员快速阅读和理解。
为支持注释功能,eJet系统的配置文件对JSON语法做了相应扩展,增加了单行注释符号#和多行注释(/* */),其语法规范如下:
# 这是单行注释,如果井号(#)不在JSon某个Key-Value对的引号里面,那么以井号开头,井号后面的内容都是注释/* 注意:多行注释是以连在一起的/和*开始 以连在一起的*和/结尾,中间的内容都是注释 多行注释开闭符号,必须不能在Key-Value对的引号里面 */
注释的内容在解析时直接忽略跳过,不会被系统解析和处理。
2.2.4 script语法
使用JSON格式的数据都是由name/value对构成,eJet系统中需要在配置文件中支持Script脚本程序,灵活动态地处理HTTP请求。
eJet配置文件对JSON语法格式扩展了一种固定名称的script对象,将名称”script”作为特殊对象的名称关键字,即以script为名称的对象,其内容不能作为JSON子对象处理,而是作为Script脚本程序内容,存放在对象名为script的对象中。其语法规范如下:
script = { if ($request_uri ~* '^/topic/[0-9](*)/(.*).mp4$') { set $video_flag 1; }};
在同一个JSon对象下,可以有多个script对象,自动构成script对象数组。
另外,使用特殊的开闭标签
,也可以定义脚本程序。在这两个开闭标签中间的内容,即是Script脚本程序,并将这些内容存储到配置文件定义的任意name名称对象中,其语法规范如下:
cache file =
;
这样,”cache file”对象的内容就是一段脚本程序,需要在解释执行到这里时,才真正具有实际数据。
三. eJet资源管理架构
3.1 三层资源定位架构
eJet Web服务器的资源管理结构分成三层:
HTTP监听服务HTTPListen – 对应的是监听本地IP地址和端口后的TCP连接
HTTP虚拟主机HTTPHost – 对应的是请求主机名称domain
HTTP资源位置HTTPLoc – 对应的是主机下的各个资源目录
一个eJet Web服务器可以启动一个到多个监听服务HTTPListen,一个监听服务下可以配置一个到多个HTTP虚拟主机,一个虚拟主机下可以配置多个资源位置HTTPLoc。这里的‘多个’没有数量限制,取决于系统的物理和内核资源限制。
3.2 HTTP监听服务 – HTTPListen
HTTP监听服务HTTPListen是指eJet Web服务器在启动时,需要绑定本地某个服务器IP地址和某个端口后,启动TCP监听服务,等候接收客户端发起TCP连接和HTTP请求数据,每个接受的HTTPCon连接一定属于某个HTTP监听服务HTTPListen。严格来说,HTTPListen负责接受HTTPCon连接,并将请求数据存储到HTTPCon的接收缓冲区,所以监听服务对应的是TC连接资源管理,即对应的是请求资源的domain和端口。
HTTP监听服务的配置信息格式参考如下:
listen = { local ip = *; #192.168.1.151 port = 443; forward proxy = on; ssl = on; ssl certificate = cert.pem; ssl private key = cert.key; ssl ca certificate = cacert.pem; request process library = reqhandle.so script = { #reply 302 https://ke.test.ejetsrv.com:8443$request_uri; addResHeader X-Nat-IP $remote_addr; } host = {.....} host = {.....} host = {.....}}
一台物理服务器可以安装多个网卡,每个网卡配置一个独立IP地址,HTTP监听服务可以监听某一个IP地址上的某个端口,也可以监听所有IP地址上的同一个端口。能启动监听服务的端口数量理论上是65536个,其中小于1024的端口需要有root超户权限才能监听。