bentools / proxy-server
一个简单的代理服务器,使用 Symfony 4.1 编写。
dev-master / 1.0.x-dev
2018-09-17 15:15 UTC
Requires
- php: ^7.1.3
- ext-ctype: *
- ext-iconv: *
- bentools/guzzle-throttle-middleware: ^0.4.0
- guzzlehttp/guzzle: ^6.3
- predis/predis: ^1.1
- sensio/framework-extra-bundle: ^5.2
- symfony/cache: *
- symfony/console: *
- symfony/flex: ^1.1
- symfony/framework-bundle: *
- symfony/monolog-bundle: ^3.3
- symfony/psr-http-message-bridge: ^1.0
- symfony/yaml: *
- zendframework/zend-diactoros: ^1.8
Requires (Dev)
- php-pm/httpkernel-adapter: ^1.0
- php-pm/php-pm: ^1.0
- phpunit/phpunit: ^7.3
- symfony/dotenv: *
- symfony/test-pack: ^1.0
- symfony/var-dumper: *
- symfony/web-server-bundle: *
Conflicts
This package is auto-updated.
Last update: 2024-09-15 00:41:46 UTC
README
这个小巧的 Symfony 4.1 应用程序作为一个代理服务器运行。
我们假设您对 Symfony 有一定的了解,以便您可以根据自己的需求进行定制。
安装
克隆当前项目
composer create-project bentools/proxy-server:1.0.x-dev my-proxy && cd my-proxy
初始化您的环境变量
cp .env.dist .env
创建您的 PHP-PM 配置
./vendor/bin/ppm config
启动您的代理服务器
./vendor/bin/ppm start
示例配置
# .env
PROXY_BASE_URI=https://some-api.example.org
# ppm.json { "bridge": "HttpKernel", "host": "proxied-api.my-server.com", "port": 8080, "workers": 6, "app-env": "prod", "debug": 0, "logging": 0, "static-directory": "", "bootstrap": "PHPPM\\Bootstraps\\Symfony", "max-requests": 1000, "max-execution-time": 0, "ttl": 0, "populate-server-var": true, "socket-path": ".ppm\/run\/", "pidfile": ".ppm\/ppm.pid", "reload-timeout": 30, "cgi-path": "\/etc\/php\/7.2.8\/bin\/php-cgi" }
现在,如果您尝试访问 http://proxied-api.my-server.com:8080/some/endpoint?foo=bar
,您将收到响应 https://some-api.example.org/some/endpoint?foo=bar
。
限流
通过您的环境变量启用 限流
# .env
PROXY_ENABLE_THROTTLING=true
PROXY_THROTTLING_MAX_REQUESTS=50
PROXY_THROTTLING_DURATION=10
这样,您将确保在10秒的时间窗口内最多只有50个请求被传输到真实主机。其他请求将被延迟。请求计数通过 Redis 共享,但您也可以实现自己的存储方式。