Apache/mod_wsgi 中的 URL 长度问题

Apache/mod_wsgi 中的 URL 长度问题

我有一个 python wsgi API,用于处理不同长度的传入 URL 负载。我相信,但并不完全确定,我可能遇到了 URL 大小的限制。

对于特定有效负载(> 6K 个字符),它在本地使用 Python Web 服务器运行良好,但当我将其移动到 Apache(在 OS X 和 RHEL 6 上)时,浏览器会显示 404 错误。根据我所看到的,如果有效负载过大,我应该会收到 413 或 414 错误。请注意,对于比这更短的 URL,我在 Apache 中运行它们没有问题。

我仔细检查了 Apache 日志,发现只有“未找到目标 WSGI 脚本或无法统计”这个错误。我用 Google 搜索到的所有与这个错误相关的信息都表明存在应用程序错误,而且如上所述,我知道我的 wsgi 配置是有效的。但它似乎只是在处理较大的 URL 时会失效,这让我认为这可能是 mod_wsgi 的问题。

我的 VirtualHost 配置是:

<VirtualHost *:80>


    Alias /cardiocatalogqt   /Library/WebServer/extjs/cardioCatalogQT
    <Location /cardiocatalogqt>
        Order deny,allow
        Allow from all
    </Location>

    WSGIApplicationGroup %{GLOBAL}

    WSGIDaemonProcess rest_api user=gregsilverman  threads=5
    WSGIScriptAlias /api /Library/WebServer/wsgi/rest_api/rest_api.wsgi
    WSGIPassAuthorization On
    <Location /api>
        Order deny,allow
        Allow from all
    </Location>


</VirtualHost>

除了缩短 URL 之外的任何建议都非常受欢迎。

答案1

这不是 WSGI 的问题,你也无能为力。我已经分析了这个问题。Apache 使用 libapr 库,并调用apr_filepath_merge在某个时候执行的函数

if (maxlen > APR_PATH_MAX) {
        return APR_ENAMETOOLONG;
    }

APR_PATH_MAXUnix 中,PATH_MAX该值为 4096。任何大于 4096 的 URL 都将触发此错误。然后在ap_core_translate(apache 源代码文件中的第 4734 行server/core.c)中返回HTTP_BAD_REQUEST

相关内容