zoukankan      html  css  js  c++  java
  • golang roadrunner中文文档(三)HTTPS 和 HTTP/2

    2021年6月8日13:15:46

    golang roadrunner中文文档(一)基础介绍

    golang roadrunner中文文档(二)PHP Workers

    golang roadrunner中文文档(三)HTTPS 和 HTTP/2

    golang roadrunner中文文档(四)app服务器

    golang roadrunner中文文档(五)集成到其他服务 docker

    您可以通过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 响应提供的虚拟标头支持HTTP/2 推送

    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 middleware
    
    import (
        "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)
        }
    }
     
    QQ群 247823727 博客文件如果不能下载请进群下载
    如果公司项目有技术瓶颈问题,如有需要,请联系我,提供技术服务 QQ: 903464207
  • 相关阅读:
    Java中的访问修饰符详细解析
    Java继承 练习题
    (转)Java 内存整理——堆、栈、常量池
    关于Char思考题
    如何使用帮助文档
    工具类的来由与静态方法
    题解 【NOIP2011】计算系数
    题解 【Uva】硬币问题
    题解 【NOIP2006】作业调度方案
    题解 【NOIP2003】神经网络
  • 原文地址:https://www.cnblogs.com/zx-admin/p/14862377.html
Copyright © 2011-2022 走看看