2

MongooseWebサーバーをC++dllに埋め込んだだけで(単一のヘッダーで、ほとんどのスタックオーバーフロースレッドで推奨されています)、最小限のサンプルコードで正しく稼働しています。

ただし、Webサーバーの非常に基本的な必需品を構成するためのチュートリアルや例などを見つけるのに苦労しています。私は次のことを理解する必要があります...

1)ディレクトリブラウジングを許可する方法

2ファイルのダウンロード速度を制限することは可能ですか?

3)ファイルのダウンロードを許可されたIPアドレスの動的リストを持つことは可能ですか?

4)特定のファイル拡張子(この場合は.bz2)のダウンロードを許可する方法 回答

5)特定のIPアドレスにバインドする方法 回答

私が見つけた情報のほとんどは、コンパイル済みのバイナリリリースの使用に関するものなので、今は少し困惑しています。どんな助けでも素晴らしいでしょう!

4

2 に答える 2

3

1)「enable_directory_listing」オプション

2)マングースに組み込まれていません(少なくとも私が持っているバージョンではなく、約6か月前のものです)。[編集:]新しいバージョンのMongooseは、ダウンロード速度の抑制をサポートしています。マニュアルから...

クライアントのダウンロード速度を制限します。スロットルは、キーと値のペアのコンマ区切りのリストです。ここで、キーは次のようになります。

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

値は、1秒あたりの浮動小数点バイト数であり、オプションで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 に答える