API

class oslo_middleware.BasicAuthMiddleware(application: WSGIApplication | None, conf: dict[str, ty.Any] | cfg.ConfigOpts | None = None)

中间件,对请求执行 HTTP 基本身份验证

class oslo_middleware.CORS(application: WSGIApplication | None, conf: dict[str, ty.Any] | cfg.ConfigOpts | None = None)

CORS 中间件。

此中间件允许 WSGI 应用为多个配置的域提供 CORS 头部。

有关更多信息,请参阅 http://www.w3.org/TR/cors/

add_origin(allowed_origin: str | list[str], allow_credentials: bool = True, expose_headers: list[str] | None = None, max_age: int | None = None, allow_methods: list[str] | None = None, allow_headers: list[str] | None = None) None

添加另一个源到此过滤器。

参数:
  • allowed_origin – 允许的源的协议、主机和端口。

  • allow_credentials – 是否允许凭据。

  • expose_headers – 要暴露的头部列表。

  • max_age – 最大缓存持续时间。

  • allow_methods – 允许的 HTTP 方法列表。

  • allow_headers – 允许客户端的 HTTP 头部列表。

返回值:

classmethod factory(global_conf: dict[str, ty.Any] | None, **local_conf: ty.Any) ty.Callable[[WSGIApplication], base.MiddlewareType]

paste.deploy 的工厂方法

allowed_origin: 允许的源的协议、主机和端口。 allow_credentials: 是否允许凭据。 expose_headers: 要暴露的头部列表。 max_age: 最大缓存持续时间。 allow_methods: 允许的 HTTP 方法列表。 allow_headers: 允许客户端的 HTTP 头部列表。

process_response(response: Response, request: Request | None = None) Response

检查 CORS 头部,并在必要时进行装饰。

执行两个检查。首先,如果发出 OPTIONS 请求,则让应用程序处理它,并在必要时用预检头部装饰响应。在这种情况下,如果底层应用程序抛出 404(即如果底层应用程序不处理 OPTIONS 请求,则会覆盖响应代码。

在所有其他请求的情况下,应用常规请求头部。

class oslo_middleware.CatchErrors(application: WSGIApplication | None, conf: dict[str, ty.Any] | cfg.ConfigOpts | None = None)

提供高级错误处理的中间件。

它捕获 WSGI 管道中后续应用程序的所有异常,以隐藏 API 响应中的内部错误。

class oslo_middleware.CorrelationId(application: WSGIApplication | None, conf: dict[str, ty.Any] | cfg.ConfigOpts | None = None)

将关联 ID 附加到 WSGI 请求的中间件

static process_request(req: webob.request.Request) webob.response.Response | None

在每个请求上调用。

如果返回 None,则堆栈中下一个应用程序将被执行。如果返回响应,则该响应将被返回,并且执行将在此处停止。

class oslo_middleware.Debug(application: WSGIApplication | None, conf: dict[str, ty.Any] | cfg.ConfigOpts | None = None)

辅助类,返回调试信息。

可以插入到任何 WSGI 应用程序链中,以获取有关请求和响应的信息。

static print_generator(app_iter: Iterable[bytes]) Iterator[bytes]

迭代时打印包装字符串迭代器的内容。

class oslo_middleware.HTTPProxyToWSGI(application: WSGIApplication | None, conf: dict[str, ty.Any] | cfg.ConfigOpts | None = None)

HTTP 代理到 WSGI 终止中间件。

此中间件使用远程 HTTP 反向代理提供的环境变量覆盖 WSGI 环境变量。

process_request(req: webob.request.Request) webob.response.Response | None

在每个请求上调用。

如果返回 None,则堆栈中下一个应用程序将被执行。如果返回响应,则该响应将被返回,并且执行将在此处停止。

class oslo_middleware.Healthcheck(application: WSGIApplication | None, conf: dict[str, ty.Any] | cfg.ConfigOpts | None = None)

用于监控的健康检查应用。

它将以“OK”作为正文返回 200。或者,如果其中一个后端报告了应用程序问题,则返回 503,并将原因作为正文返回。

这对于以下原因很有用

  • 负载均衡器可以“ping”此 URL 以确定服务可用性。

  • 提供一个类似于 apache 中的“mod_status”的端点,该端点可以提供详细信息(或不提供详细信息,具体取决于配置)关于服务器的活动。

  • (等等)

注意

此中间件指示 API 可访问,但它并不指示它是否一定能正常工作,或者任何其他 API 请求是否真的有效。

示例请求/响应(详细模式)

$ curl -i -X HEAD "http://0.0.0.0:8775/healthcheck"
HTTP/1.1 204 No Content
Content-Type: text/plain; charset=UTF-8
Content-Length: 0
Date: Fri, 11 Sep 2015 18:55:08 GMT

$ curl -i -X GET "http://0.0.0.0:8775/healthcheck"
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Content-Length: 2
Date: Fri, 11 Sep 2015 18:55:43 GMT

OK

$ curl -X GET -i -H "Accept: application/json" "http://0.0.0.0:8775/healthcheck"
HTTP/1.0 200 OK
Date: Wed, 24 Aug 2016 06:09:58 GMT
Content-Type: application/json
Content-Length: 63

{
    "detailed": false,
    "reasons": [
        "OK"
    ]
}

$ curl -X GET -i -H "Accept: text/html" "http://0.0.0.0:8775/healthcheck"
HTTP/1.0 200 OK
Date: Wed, 24 Aug 2016 06:10:42 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 239

<HTML>
<HEAD><TITLE>Healthcheck Status</TITLE></HEAD>
<BODY>

<H2>Result of 1 checks:</H2>
<TABLE bgcolor="#ffffff" border="1">
<TBODY>
<TR>

<TH>
Reason
</TH>
</TR>
<TR>
    <TD>OK</TD>
</TR>
</TBODY>
</TABLE>
<HR></HR>

</BODY>

示例请求/响应(详细模式)

$ curl -X GET -i -H "Accept: application/json" "http://0.0.0.0:8775/healthcheck"
HTTP/1.0 200 OK
Date: Wed, 24 Aug 2016 06:11:59 GMT
Content-Type: application/json
Content-Length: 3480

{
    "detailed": true,
    "gc": {
        "counts": [
            293,
            10,
            5
        ],
        "threshold": [
            700,
            10,
            10
        ]
    },
    "greenthreads": [
       ...
    ],
    "now": "2016-08-24 06:11:59.419267",
    "platform": "Linux-4.2.0-27-generic-x86_64-with-Ubuntu-14.04-trusty",
    "python_version": "2.7.6 (default, Jun 22 2015, 17:58:13) \n[GCC 4.8.2]",
    "reasons": [
        {
            "class": "HealthcheckResult",
            "details": "Path '/tmp/dead' was not found",
            "reason": "OK"
        }
    ],
    "threads": [
        ...
    ]
}

$ curl -X GET -i -H "Accept: text/html" "http://0.0.0.0:8775/healthcheck"
HTTP/1.0 200 OK
Date: Wed, 24 Aug 2016 06:36:07 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 6838

<HTML>
<HEAD><TITLE>Healthcheck Status</TITLE></HEAD>
<BODY>
<H1>Server status</H1>
<B>Server hostname:</B><PRE>...</PRE>
<B>Current time:</B><PRE>2016-08-24 06:36:07.302559</PRE>
<B>Python version:</B><PRE>2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2]</PRE>
<B>Platform:</B><PRE>Linux-4.2.0-27-generic-x86_64-with-Ubuntu-14.04-trusty</PRE>
<HR></HR>
<H2>Garbage collector:</H2>
<B>Counts:</B><PRE>(77, 1, 6)</PRE>
<B>Thresholds:</B><PRE>(700, 10, 10)</PRE>

<HR></HR>
<H2>Result of 1 checks:</H2>
<TABLE bgcolor="#ffffff" border="1">
<TBODY>
<TR>
<TH>
Kind
</TH>
<TH>
Reason
</TH>
<TH>
Details
</TH>

</TR>
<TR>
<TD>HealthcheckResult</TD>
    <TD>OK</TD>
<TD>Path &#39;/tmp/dead&#39; was not found</TD>
</TR>
</TBODY>
</TABLE>
<HR></HR>
<H2>1 greenthread(s) active:</H2>
<TABLE bgcolor="#ffffff" border="1">
<TBODY>
<TR>
    <TD><PRE>  File &#34;oslo_middleware/healthcheck/__main__.py&#34;, line 94, in &lt;module&gt;
    main()
  File &#34;oslo_middleware/healthcheck/__main__.py&#34;, line 90, in main
    server.serve_forever()
  ...
</PRE></TD>
</TR>
</TBODY>
</TABLE>
<HR></HR>
<H2>1 thread(s) active:</H2>
<TABLE bgcolor="#ffffff" border="1">
<TBODY>
<TR>
    <TD><PRE>  File &#34;oslo_middleware/healthcheck/__main__.py&#34;, line 94, in &lt;module&gt;
    main()
  File &#34;oslo_middleware/healthcheck/__main__.py&#34;, line 90, in main
    server.serve_forever()
  ....
</TR>
</TBODY>
</TABLE>
</BODY>
</HTML>

粘贴配置示例

[app:healthcheck]
use = egg:oslo.middleware:healthcheck
backends = disable_by_file
disable_by_file_path = /var/run/nova/healthcheck_disable

[pipeline:public_api]
pipeline = healthcheck sizelimit [...] public_service

如果希望拥有具有不同健康检查配置的管道,可以定义多个筛选器部分,例如

[composite:public_api]
use = egg:Paste#urlmap
/ = public_api_pipeline
/healthcheck = healthcheck_public

[composite:admin_api]
use = egg:Paste#urlmap
/ = admin_api_pipeline
/healthcheck = healthcheck_admin

[pipeline:public_api_pipeline]
pipeline = sizelimit [...] public_service

[pipeline:admin_api_pipeline]
pipeline = sizelimit [...] admin_service

[app:healthcheck_public]
use = egg:oslo.middleware:healthcheck
backends = disable_by_file
disable_by_file_path = /var/run/nova/healthcheck_public_disable

[filter:healthcheck_admin]
use = egg:oslo.middleware:healthcheck
backends = disable_by_file
disable_by_file_path = /var/run/nova/healthcheck_admin_disable
classmethod app_factory(global_conf: dict[str, Any] | None, **local_conf: Any) Self

paste.deploy 的工厂方法。

参数:
  • global_conf – 所有中间件的选项字典(通常是粘贴部署配置文件中的 [DEFAULT] 部分)

  • local_conf – 专用于此中间件的选项(通常是粘贴部署配置文件中间件部分中定义的选项)

classmethod factory(global_conf: dict[str, ty.Any] | None, **local_conf: ty.Any) ty.Callable[[WSGIApplication], base.ConfigurableMiddleware]

paste.deploy 的工厂方法。

参数:
  • global_conf – 所有中间件的选项字典(通常是粘贴部署配置文件中的 [DEFAULT] 部分)

  • local_conf – 专用于此中间件的选项(通常是粘贴部署配置文件中间件部分中定义的选项)

class oslo_middleware.RequestBodySizeLimiter(application: WSGIApplication | None, conf: dict[str, ty.Any] | cfg.ConfigOpts | None = None)

限制传入请求的大小。

class oslo_middleware.RequestId(application: WSGIApplication | None, conf: dict[str, ty.Any] | cfg.ConfigOpts | None = None)

确保请求 ID 的中间件。

它确保为每个 API 请求分配请求 ID 并将其设置为请求环境。请求 ID 也添加到 API 响应中。

配置选项

RequestBodySizeLimiter

oslo_middleware

max_request_body_size
类型:

整数

默认值:

114688

每个请求的最大正文大小,以字节为单位。

SSLMiddleware