2021年6月8日13:15:46
golang roadrunner中文文档(一)基础介绍
golang roadrunner中文文档(二)PHP Workers
golang roadrunner中文文档(三)HTTPS 和 HTTP/2
golang roadrunner中文文档(四)app服务器
golang roadrunner中文文档(五)集成到其他服务 docker
您可以通过ssl
在http
配置中添加部分来启用 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"
在哪里:
dir
: 目录路径。forbid
: 不应提供的文件扩展名。allow
: 应该提供的文件扩展名(空 - 除禁止外的所有文件)。如果扩展名同时出现在(允许和禁止)hashmaps 中 - 这被视为我们应该禁止文件扩展名。calculate_etag
: 打开静态文件的 etag 计算。weak
: 使用弱生成器 (/W),它只使用文件名来生成 CRC32 和。如果为 false - 用于生成 CRC32 总和的所有文件内容。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)
}
}