项目需要实现通过软路由开启连接限制,仅仅允许在系统中注册的设备连接到专用局域网,以保证会议中资料的安全性。
在开发过程中,我们发现在服务端和软路由之间通过ssh建立的连接并不稳定,尤其是需要短时间在路由器执行大量指令时,因为需要使用字节流来进行命令命令的传输和执行命令的回显,对路由器的io性能提出了一定要求。当路由器处理的网络数据过多时进行大量命令的处理,很容易造成路由器假死的故障存在。其次ssh连接超时中断的问题也对于维持ssh长连接来实现功能造成了一定的阻碍。
经过考察,笔者决定使用CGI来实现对路由器的设备通讯。
在框架是,我选择基于python的cgi来实现,因为python作为脚本语言对于字符串的处理做的非常好,同时作为在工程中广泛使用的语言,python对比lua会更易读、更好维护。
首先使用lighttpd
来开启cgi支持
# version must be the same as /etc/glconfig
# version=3.1
server.modules = (
)
server.network-backend = "write"
server.error-handler-404="/404.html"
server.document-root = "/www/"
server.pid-file = "/var/run/lighttpd.pid"
server.errorlog = "/var/log/lighttpd/error.log"
server.max-keep-alive-requests = 100
index-file.names = ( "idx_vue.html" )
$HTTP["url"] =~ "^/cgi-bin/" {
cgi.assign = ( ".py" => "/usr/bin/python3" )
}
#$HTTP["url"] =~ "\.html" {
# expire.url = ( "" => "access plus 1 seconds" )
#}
#$HTTP["host"] =~ "([^:/]+)" {
# url.redirect = ( "^/(index.html)" => "http://%0/" )
#}
##
# which extensions should not be handle via static-file transfer
#
# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
static-file.exclude-extensions = (