2

我刚刚将 Mongoose Web 服务器嵌入到我的 C++ dll 中(只是一个头文件,并且在大多数堆栈溢出线程中都推荐使用),并且我使用非常少的示例代码将其启动并正常运行。

但是,我很难找到有关配置 Web 服务器的基本必需品的任何类型的教程、示例等。我需要弄清楚以下...

1) 如何允许目录浏览

2 是否可以限制文件的下载速度?

3) 是否可以有一个允许下载文件的 IP 地址的动态列表?

4)如何允许下载特定文件扩展名(在这种情况下为.bz2

5)如何绑定到特定的 IP 地址

我发现的大部分信息都是关于使用预编译的二进制版本,所以我现在有点难过。任何帮助都会很棒!

4

2 回答 2

3

1) “启用目录列表”选项

2)没有内置在猫鼬中(至少不是我拥有的版本,大约 6 个月大)。[编辑:] 较新版本的 Mongoose 支持限制下载速度。从手册...

限制客户端的下载速度。throttle 是一个逗号分隔的 key=value 对列表,其中 key 可以是:

*                   limit speed for all connections
x.x.x.x/mask        limit speed for specified subnet
uri_prefix_pattern  limit speed for given URIs

该值是每秒字节的浮点数,可选地后跟 ak 或 m 字符,分别表示千字节和兆字节。限制为 0 表示无限速率。最后匹配的规则获胜。例子:

*=1k,10.0.0.0/8=0   limit all accesses to 1 kilobyte per second,
                    but give connections from 10.0.0.0/8 subnet
                    unlimited speed

/downloads/=5k      limit accesses to all URIs in `/downloads/` to
                    5 kilobytes per secods. All other accesses are unlimited

3) “access_control_list”选项。在将客户端 IP 与要接受和/或忽略的 IP 列表进行比较的代码accept_new_connection调用中。check_acl从手册...

指定访问控制列表 (ACL)。ACL 是一个逗号分隔的 IP 子网列表,每个子网前面都带有“-”或“+”号。加号表示允许,减号表示拒绝。如果省略子网掩码,如“-1.2.3.4”,则表示单个 IP 地址。掩码可能从 0 到 32 不等。在每个请求上,都会遍历完整列表,最后一场比赛获胜。默认设置是允许所有。例如,要只允许 192.168/16 子网连接,请运行“mongoose -0.0.0.0/0,+192.168/16”。默认: ””

http://code.google.com/p/mongoose/wiki/MongooseManual

于 2011-08-08T14:08:31.497 回答
2

当然,一旦我放弃并发布,我发现大多数答案就在我面前。这是他们的选择...

const char *options[] =
{
    "document_root", "C:/",
    "listening_ports", "127.0.0.1:8080",
    "extra_mime_types", ".bz2=plain/text",
    NULL
};

但是,我仍然不确定如何启用目录浏览。现在,我的回调函数只是示例中的基本函数(如下所示)。我需要做什么才能得到它以便列出文件?

static void *callback(enum mg_event event, struct mg_connection *conn, const struct mg_request_info *request_info)
{
    if (event == MG_NEW_REQUEST)
    {
        // Echo requested URI back to the client
        mg_printf(conn, "HTTP/1.1 200 OK\r\n"
            "Content-Type: text/plain\r\n\r\n"
            "%s", request_info->uri);

        return "";  // Mark as processed
    }
    else
    {
        return NULL;
    }
}
于 2011-08-08T12:08:38.020 回答