tourze/workerman-sni-proxy
Composer 安装命令:
composer require tourze/workerman-sni-proxy
包简介
基于Workerman的SNI代理服务器,支持透明代理和流量转发
README 文档
README
A high-performance SNI (Server Name Indication) proxy server based on Workerman.
Features
- Parses SNI extension from client TLS handshakes to identify target hosts
- Routes connections to appropriate backend servers based on SNI hostname
- Supports whitelisting of allowed hostnames
- Provides flexible configuration options for binding address and port
- Handles connection pooling and management efficiently
- Integrates with PSR-compatible loggers (including Monolog)
- Minimal dependencies, lightweight design for optimal performance
Requirements
- PHP 8.1 or higher
- Workerman 5.1 or higher
- PSR-compatible logger (optional, Monolog recommended)
Installation
composer require tourze/workerman-sni-proxy
Quick Start
Basic Example
<?php use Tourze\Workerman\SNIProxy\SniProxyWorker; use Workerman\Worker; require_once __DIR__ . '/vendor/autoload.php'; // Create an SNI proxy worker listening on port 8443 $worker = new SniProxyWorker('0.0.0.0', 8443); // Set worker process count $worker->count = 4; // Run worker Worker::runAll();
With Host Whitelist and Logging
<?php use Monolog\Handler\StreamHandler; use Monolog\Level; use Monolog\Logger; use Tourze\Workerman\SNIProxy\SniProxyWorker; use Workerman\Worker; require_once __DIR__ . '/vendor/autoload.php'; // Initialize logger $logger = new Logger('sni-proxy'); $logger->pushHandler(new StreamHandler('php://stdout', Level::Debug)); // Whitelist of allowed hosts (format: "hostname:port") $allowedHosts = [ "www.example.com:443", "api.example.com:443" ]; // Create an SNI proxy worker with whitelist and logger $worker = new SniProxyWorker('0.0.0.0', 8443, $allowedHosts, $logger); // Set worker process count $worker->count = 4; // Run worker Worker::runAll();
Configuration
SniProxyWorker Constructor
/** * @param string $bindHost Binding address * @param int $bindPort Binding port * @param array $remoteHosts Allowed hosts list (format: ["hostname:port", ...]) * @param LoggerInterface|null $logger PSR-compatible logger instance */ public function __construct( string $bindHost = '0.0.0.0', int $bindPort = 443, array $remoteHosts = [], ?LoggerInterface $logger = null )
Configuration Options
- bindHost: The IP address to bind the proxy server (default: '0.0.0.0')
- bindPort: The port to listen on (default: 443)
- remoteHosts: Array of allowed destination hosts in "hostname:port" format
- logger: PSR-3 compatible logger for debugging and monitoring
Advanced Usage
Custom Remote Target Resolution
use Tourze\Workerman\SNIProxy\RemoteTarget; // Custom target resolution logic $worker = new SniProxyWorker('0.0.0.0', 8443); $worker->onConnect = function($connection) { // Custom connection handling };
Production Deployment
// daemon.php <?php use Workerman\Worker; use Tourze\Workerman\SNIProxy\SniProxyWorker; require_once __DIR__ . '/vendor/autoload.php'; // Run as daemon Worker::$daemonize = true; Worker::$pidFile = '/var/run/sni-proxy.pid'; Worker::$logFile = '/var/log/sni-proxy.log'; $worker = new SniProxyWorker('0.0.0.0', 443); $worker->count = 8; // 8 processes Worker::runAll();
Monitoring and Metrics
use Monolog\Handler\StreamHandler; use Monolog\Level; use Monolog\Logger; $logger = new Logger('sni-proxy'); $logger->pushHandler(new StreamHandler('/var/log/sni-proxy.log', Level::Info)); $worker = new SniProxyWorker('0.0.0.0', 8443, [], $logger); // Monitor connections $worker->onConnect = function($connection) use ($logger) { $logger->info('New connection from ' . $connection->getRemoteIp()); }; $worker->onClose = function($connection) use ($logger) { $logger->info('Connection closed from ' . $connection->getRemoteIp()); };
Use Cases
- TLS traffic routing based on domain name
- Implementing virtual hosting for HTTPS services
- SSL/TLS offloading at edge servers
- Monitoring and debugging TLS traffic
- Access control for HTTPS services
Notes
- Using port 443 requires root privileges
- For testing, use a non-privileged port like 8443
- In production, consider using systemd or supervisor to manage the process
- Performance scales with the number of worker processes
License
The MIT License (MIT). Please see License File for more information.
tourze/workerman-sni-proxy 适用场景与选型建议
tourze/workerman-sni-proxy 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 03 月 30 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 tourze/workerman-sni-proxy 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 tourze/workerman-sni-proxy 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 2
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 15
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-03-30