roadrunner中文文档(三)HTTPS 和 HTTP/2
发布日期:2021-06-29 04:20:38 浏览次数:2 分类:技术文章

本文共 3596 字,大约阅读时间需要 11 分钟。

2021年6月8日13:15:46

您可以通过sslhttp配置中添加部分来启用 HTTPS 和 HTTP2 支持。

http:  # host and port separated by semicolon  address: 127.0.0.1:8080 ssl: # host and port separated by semicolon (default :443) address: :8892 redirect: false cert: fixtures/server.crt key: fixtures/server.key root_ca: root.crt # optional support for http2 http2: h2c: false max_concurrent_streams: 128

将 HTTP 重定向到 HTTPS

为了能够从自动重定向http://https://redirect选项true(默认禁用)。

HTTP/2 推送资源

RoadRunner通过 PHP 响应提供的虚拟标头支持。

return $response->withAddedHeader('http2-push', '/test.js');

注意资源的路径必须与公共应用程序目录相关,并且必须包含/在开头。

请注意,HTTP2 推送仅在static启用服务的HTTPS 下工作。

H2C

您可以使用 H2C 通过非加密 TCP 连接启用 HTTP/2 支持:

http:  http2.h2c: true

快速CGI

HTTP 模块内部有 FastCGI 前端支持,您可以启用它(默认禁用):

http:  # HTTP service provides FastCGI as frontend  fcgi:    # FastCGI connection DSN. Supported TCP and Unix sockets.    address: tcp://0.0.0.0:6920

根证书颁发机构支持

.rr.yaml 中的选项支持的根 CA

http:  ssl:    root_ca: root.crt

提供静态内容

可以使用 RoadRunner 提供静态内容。

启用 HTTP 中间件

要启用静态内容服务,请使用 http 部分中的配置:

http:  # host and port separated by semicolon  address: 127.0.0.1:44933 # ... static: dir: "." forbid: [""] allow: [".txt", ".php"] calculate_etag: false weak: false request: input: "custom-header" response: output: "output-header"

在哪里:

  1. dir: 目录路径。
  2. forbid: 不应提供的文件扩展名。
  3. allow: 应该提供的文件扩展名(空 - 除禁止外的所有文件)。如果扩展名同时出现在(允许和禁止)hashmaps 中 - 这被视为我们应该禁止文件扩展名。
  4. calculate_etag: 打开静态文件的 etag 计算。
  5. weak: 使用弱生成器 (/W),它只使用文件名来生成 CRC32 和。如果为 false - 用于生成 CRC32 总和的所有文件内容。
  6. request/response:静态文件的自定义标头。

要将静态内容与其他中间件结合,请使用以下序列(静态将始终是行中的最后一个,文件服务器将应用标头和 gzip 插件):

http:  # host and port separated by semicolon  address: 127.0.0.1:44933 # ... middleware: [ "headers", "gzip" ] # ... headers: # ... static: dir: "." forbid: [""] allow: [".txt", ".php"] calculate_etag: false weak: false request: input: "custom-header" response: output: "output-header"

Headers and CORS

RoadRunner 可以为您的应用程序自动设置请求/响应标头并控制 CORS。

CORS

要启用 CORS 标头,请将以下部分添加到您的配置中。

http:  address: 127.0.0.1:44933 middleware: ["headers"] # ... headers: cors: allowed_origin: "*" allowed_headers: "*" allowed_methods: "GET,POST,PUT,DELETE" allow_credentials: true exposed_headers: "Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma" max_age: 600

确保声明“headers”中间件。

响应或请求的自定义标头

您可以控制要为传出响应设置的附加标头和要添加到发送到应用程序的请求中的标头。

http:  # ...  headers:      # Automatically add headers to every request passed to PHP.      request: Example-Request-Header: "Value" # Automatically add headers to every response. response: X-Powered-By: "RoadRunner"

HTTP中间件

RoadRunner HTTP 服务器使用默认的 Golang 中间件模型,允许您使用自定义或社区驱动的中间件对其进行扩展。具有中间件注册的最简单服务如下所示:

package middlewareimport (    "net/http")const PluginName = "middleware" type Plugin struct{} // to declare plugin func (g *Plugin) Init() error { return nil } func (g *Plugin) Middleware(next http.Handler) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // do something } } // Middleware/plugin name. func (g *Plugin) Name() string { return PluginName }

中间件必须对应以下并命名。

我们必须在main.go文件中注册此服务才能正确解决依赖关系:

container, err := endure.NewContainer(nil, endure.SetLogLevel(endure.ErrorLevel), endure.RetryOnFail(false))if err != nil {    panic(err) } err = container.Register(&http.Service{}) if err != nil { panic(err) } err = container.Register(&custom.Service{}) if err != nil { panic(err) } err = container.RegisterAll( // ... &middleware.Plugin{}, )

PSR7 属性

您可以安全地将值传递给ServerRequestInterface->getAttributes()usingattributes包:

func (s *Service) middleware(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { attributes.Set(r, "key", "value") next(w, r) } }
 

转载地址:https://blog.csdn.net/zh7314/article/details/117726104 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:roadrunner中文文档(五)集成到其他服务 docker
下一篇:roadrunner中文文档(四)app服务器

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月26日 10时17分26秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章