多个主机之间的重定向均衡器。

1.0 2021-04-19 10:28 UTC

This package is not auto-updated.

Last update: 2024-09-24 04:09:59 UTC


README

CI Workflow Codecov

302

这是一个不作为负载均衡器的负载均衡器。

它是一个 重定向 均衡器。它不是将流量转发到特定的主机/端口,而是返回带有不同位置的302响应。

典型用法是,您的入口点是 https://example.com/foo,您希望将流量重定向到由 https://01.example.comhttps://02.example.com 组成的池,同时保持路径和查询字符串完整。

它是基于 ReactPHPPHP 8 上构建的。因为它提供非常短的响应并在循环中运行,所以它可以轻松地处理每秒数千个请求而不会眨眼。

构建

构建是可选的(您可以简单地运行 php bin/console serve),但将生成一个优化后的单文件可执行PHAR。

PHP 8、Composer和Box必须在您的计算机上全局安装。

要构建应用程序,请运行

./bin/build

它将位于 bin/302 中。

用法

实时平衡(无持久性 - 用于测试或原型设计)

php bin/302 serve \
--host=0.0.0.0 \
--port=8080 \
--pick=random \ # or round-robin
example1.org \
example2.org \
example3.org
GET http://0.0.0.0:8080/foo?bar=baz

HTTP/1.1 302 Found 
Location: http://example2.org/foo?bar=baz

持久存储(Redis)

# Expose the REDIS_DSN variable if necessary, default is:
export REDIS_DSN="redis://localhost:6379"
php bin/302 serve --host=0.0.0.0 --port=8080

应用程序将运行,但用户代理将获得503错误,因为服务器池为空。

将服务器添加到池中

php bin/302 server:add example1.org

可以在 302 serve 运行时运行此命令,无需重新启动应用程序!

从池中移除服务器

php bin/302 server:remove example1.org

可以在 302 serve 命令运行时运行此命令,无需重新启动应用程序!

列出池中的服务器

php bin/302 server:list

测试

./vendor/bin/pest

部署

示例Supervisor配置

构建应用程序之后,您可以轻松创建一个supervisor配方以在启动时加载它

[program:302]
command=php /usr/local/bin/302 serve --host=127.0.0.1 --port=80%(process_num)02d
user=www-data
numprocs=4
startsecs=1
autostart=true
autorestart=true
process_name=%(program_name)s_%(process_num)02d
environment = APP_LOG_DIR=/var/log/302

使用上述配置,302将在 127.0.0.1:8000127.0.0.1:8001127.0.0.1:8002127.0.0.1:8003 上运行。

轮询将在实例之间共享(因为它们共享相同的Redis实例)。

CORS / SSL终止

302没有内置的CORS或SSL终止,但这可以通过任何具有反向代理功能的Web服务器(Apache、Nginx、Caddy等)处理。

Caddyfile示例

如果您使用Caddy,这里是一个示例 Caddyfile

example.org {
    @get {
        method GET
    }
    @options {
        method OPTIONS
    }
    header Access-Control-Allow-Origin *
    header Access-Control-Allow-Redirect true
    respond @options 200
    reverse_proxy @get 127.0.0.1:8000 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003
}