Ubnt路由器EdgeOS利用自带的HTTP服务提供文件下载

修改EdgeOS自带的lighttpd服务,可提供诸如PAC、wpad.dat等文件的HTTP直接访问功能。

SSH连接Ubnt路由器,进入root权限:

sudo -i

lighttpd服务默认情况下用于提供Ubnt路由器的Web服务。查看默认的lighttpd服务配置:

cat /etc/lighttpd/lighttpd.conf

可以看到默认HTTP文件目录位于/var/www/htdocs下:

server.document-root        = "/var/www/htdocs"

将需要挂载的文件,以wpad.dat为例,复制或者软连接到/var/www/htdocs目录下,完成第一步。


即便复制了文件,Ubnt自带的lighttpd默认是不会提供HTTP根目录的下载功能的,还需进一步修改配置:

vi /etc/lighttpd/conf-enabled/15-fastcgi-python.conf

这个文件默认是如下的内容:

var.gui.bin = "/var/www/python/gui.py"
var.gui.flags = ""
# debugflag should be empty or " -d"
var.gui.debugflag = ""

$HTTP["url"] =~ "^/(?!lib|media|ws|tests|api/v1.0/)" {
        fastcgi.debug = 0
        fastcgi.server = (
                "/" => (
                        "python-fcgi" =>        (
                                "check-local" => "disable",
                                "bin-path" => var.gui.bin + var.gui.flags + var.gui.debugflag,
                                "socket" => "/var/run/ubnt-rtr-ui/fastcgi.gui.socket",
                                "fix-root-scriptname" => "enable",
                                "max-procs" => 1
                        )
                )
        )
}

可见除了特定路径外,lighttpd会将HTTP请求移交给gui.py进行处理。要提供文件的HTTP访问功能,在第6行相应地修改正则表达式即可。

例如需要下载/var/www/htdocs/下的wpad.dat,修改第6行为:

$HTTP["url"] =~ "^/(?!lib|media|ws|tests|api/v1.0/|wpad.dat)" {

保存,然后重启服务:

systemctl restart lighttpd

完成第二步。


Ubnt默认只开启了HTTPS服务,并将HTTP请求重定向到了HTTPS。由于Ubnt默认的HTTPS的证书问题,像PAC自动代理配置可能无法支持从HTTPS直接访问文件。

如果要关闭HTTPS重定向,修改配置文件:

vi /etc/lighttpd/conf-enabled/10-ssl.conf

第24行开始为:

$HTTP["scheme"] == "http" {
    # IPv4 redirect
    $HTTP["host"] !~ "\[.*\]" {
       $HTTP["host"] =~ "^([^\:]+)(\:.*)?$" {
           url.redirect = (
               "^(.*)$" => "https://%1:443$1"
           )
       }
    }
    # IPv6 redirect
    $HTTP["host"] =~ "\[.*\]" {
        $HTTP["host"] =~ "^([^]]+)(.)(\:.*)?$" {
            url.redirect = (
                "^(.*)$" => "https://%1%2:443$1"
            )
        }
    }
}

注释掉IPv4 redirect:

$HTTP["scheme"] == "http" {
    # IPv4 redirect
    # $HTTP["host"] !~ "\[.*\]" {
    #    $HTTP["host"] =~ "^([^\:]+)(\:.*)?$" {
    #        url.redirect = (
    #            "^(.*)$" => "https://%1:443$1"
    #        )
    #    }
    # }
    # IPv6 redirect
    $HTTP["host"] =~ "\[.*\]" {
        $HTTP["host"] =~ "^([^]]+)(.)(\:.*)?$" {
            url.redirect = (
                "^(.*)$" => "https://%1%2:443$1"
            )
        }
    }
}

保存,然后重启服务:

systemctl restart lighttpd

即可。

称谓(*)
邮箱
留言(*)