网站突然用IP访问不了了(因为启用了ProtocolEcho On?)!!(结帖)

网站突然用IP访问不了了(因为启用了ProtocolEcho On?)!!(结帖)

自己的一个网站,一直用IP地址访问的都没有任何问题!

今天上午突然用IP地址访问不了了,但是用域名可以,但是我在配置文件中没有用虚机啊!

刚刚找到问题的所在,ProtocolEcho On

我把这句话注释一下使用IP访问就正常了!!!这句话是做什么的?到底怎么用?

[root@www1 conf]# cat httpd.conf | grep Include
Include conf/extra/httpd-info.conf

因为mod_echo是这样做的:

    ap_hook_process_connection(process_echo_connection, NULL, NULL, APR_HOOK_MIDDLE);

他拦截了网络层建立连接的处理,然后

static int process_echo_connection(conn_rec *c)
{
    apr_bucket_brigade *bb;
    apr_bucket *b;
    apr_status_t rv;
    EchoConfig *pConfig = ap_get_module_config(c->base_server->module_config, &echo_module);// 获取模块配置

    if (!pConfig->bEnabled)// 如果是被启用的,就是httpd.conf中的
// LoadModule echo_module modules/mod_echo.so
// ProtocolEcho On
    {
        return DECLINED;
    }

    do
    {
        bb = apr_brigade_create(c->pool, c->bucket_alloc);// 创建处理桥

        /* Get a single line of input from the client */
        if (((rv = ap_get_brigade(c->input_filters, bb, AP_MODE_GETLINE, APR_BLOCK_READ, 0)) != APR_SUCCESS)
            || APR_BRIGADE_EMPTY(bb))// 从输入过滤器获取一行输入,即监听回车,如遇回车则读取其前数据到bb中
        {
            apr_brigade_destroy(bb);
            break;
        }

        /* Make sure the data is flushed to the client */
        b = apr_bucket_flush_create(c->bucket_alloc);// 创建输出器
        APR_BRIGADE_INSERT_TAIL(bb, b);// 将输出器追加到桥bb的后面

        /* Send back the data. */
        rv = ap_pass_brigade(c->output_filters, bb);// 传递桥bb给输出器,这样数据将输出到客户端
    } while (rv == APR_SUCCESS);// 这里是一个循环等待,直到ap_pass_brigade返回值不成功[不为APR_SUCCESS],就退出循环。
// 因为这里循环等待,就会导致apache进程hang住,所以其他请求,比如正常的网页访问就不能得到服务了

    return OK;
}