Перейти к содержимому
docs.
WORKSPACE

Документации проектов

Открыть каталог проектов
Localzet ServerАсинхронный PHP-серверTriangleФреймворк и компонентыMIX IDИдентификация и интеграцииHack APIПубличные API хакатонаACNПроект и компонентыUserlay / UserNetПроект и компонентыAxiomПроект и компонентыМесседжинг через почтуПроект и компонентыLWT / JWT / JOSEПроект и компонентыФинансовая аналитика KimaiПроект и компонентыМультипарадигмальная БДПроект и компонентыZorin PlatformПроект и компонентыZorin TrustПроект и компонентыFloraScope / VegwatchПроект и компонентыaegis-qДокументация проектаaevumdbДокументация проектаauditДокументация проектаauto-invest-managerАвтотрейдерcaine-companionДокументация проектаcertbot-cloudflareДокументация проектаClusterLocalzet Server / ClustercmdveilДокументация проектаConsolePHP CLICronБиблиотеки Localzet Serverdata-connectorДокументация проектаdevice-controlDevice Controlenn-projectДокументация проектаEventsБиблиотеки Localzet ServerflowsintДокументация проектаforgeДокументация проектаHttpClientБиблиотеки Localzet ServerinterpreterСобственный языкinvariaДокументация проектаkeynotesДокументация проектаknotrouteKnotroutelaravel-personal-analyticsДокументация проектаlocalzet-osДокументация проектаmeridianДокументация проектаMQTTБиблиотеки Localzet Servernano-kernelСобственная ОСNoterДокументация проектаpersonal-analyticsДокументация проектаProxyБиблиотеки Localzet Server✓PSRБиблиотеки Localzet ServerPSR-7Библиотеки Localzet Serverrschs-monitorДокументация проектаsemsealДокументация проектаshardsealДокументация проектаSocketIOБиблиотеки Localzet ServerSOCKS5Библиотеки Localzet Serverstandalone-analyticsДокументация проектаstatic-php-cliДокументация проектаStorageБиблиотеки Localzet ServersutureДокументация проектаtempoweaveДокументация проектаttsСинтез речиTunnelБиблиотеки Localzet Serverui-kitUI KitvesperДокументация проектаWebAnalyzerWebAnalyzerzorin-access-brokerДокументация проектаzorin-authority-brokerДокументация проектаzorin-authority-sdk-phpДокументация проектаzorin-authority-sdk-pythonДокументация проектаzorin-authority-sdk-tsДокументация проектаzorin-client-intelДокументация проектаzorin-device-core-aospДокументация проектаzorin-host-agentДокументация проектаzorin-native-labДокументация проектаzorin-nodeДокументация проектаzorin-opsДокументация проектаdonstu-python-sdkДокументация проектаfloortraceFloortraceserver-rsLocalzet Server / Cluster
Каталог

Proxy принимает TCP-подключение, извлекает целевой адрес из первой строки HTTP-запроса и связывает клиентское соединение с AsyncTcpConnection к этому адресу. Основной класс localzet\Proxy наследует Localzet Server.

Реализация не добавляет авторизацию пользователя, ACL адресов, кэширование и полноценный HTTP-parser. Используйте её только в изолированной доверенной среде с контролируемым форматом запросов.

Манифест требует PHP 8.1+ и Localzet Server ^4.1:

Окно терминала
composer config repositories.localzet-proxy vcs https://github.com/localzet/Proxy
composer require localzet/proxy:dev-main
use localzet\Proxy;
use localzet\Server;
require __DIR__ . '/vendor/autoload.php';
$proxy = new Proxy('tcp://127.0.0.1:8080');
$proxy->count = 1;
Server::runAll();

Явный loopback-адрес не допускает внешних клиентов. Если нужен доступ по сети, настройте его ограничение отдельно; отсутствие проверок в самом Proxy иначе превращает сервис в открытый выход к сети сервера.

Обработчик делит полученный buffer по пробелам и передаёт второй элемент в parse_url(). Для извлечения hostname нужен абсолютный URL:

GET http://example.test/path HTTP/1.1
Host: example.test

Он не разрешает обычный origin-form GET /path HTTP/1.1 по заголовку Host. Если parse_url() не вернул host, callback просто завершается, без HTTP-ответа об ошибке.

Исходящий порт берётся из URL либо устанавливается в 80. Схема https не включает TLS автоматически: создаётся именно tcp://host:port. Переданный buffer отправляется upstream без переписывания request target и hop-by-hop-заголовков.

В коде есть ветка для метода CONNECT, но стандартный authority-form CONNECT example.test:443 HTTP/1.1 не содержит hostname в форме, ожидаемой parse_url(), и не проходит предварительную проверку.

Если передать искусственный absolute-form с host, обработчик отправит 200 Connection Established до подтверждения соединения с upstream. Поэтому эту ветку нельзя считать надёжным HTTPS CONNECT-прокси для браузера. Ошибка upstream не преобразуется в соответствующий HTTP-ответ: callback onError пустой.

После создания upstream обе стороны соединяются через pipe(). Proxy не реализует отдельные ограничения размера HTTP-body, разбор нескольких запросов на keep-alive, маршрутизацию каждого следующего запроса или изоляцию destinations в одном клиентском соединении.

На входе используется raw TCP. Первая строка может прийти несколькими фрагментами, но собственного буфера ожидания полной строки здесь нет. Не считайте успешный запрос из одного buffer подтверждением корректной обработки произвольного TCP-разбиения.

Для дальнейшего использования в качестве общего forward proxy нужны явный parser состояния запроса, корректный CONNECT, подтверждение upstream до ответа, ACL и ограниченная обработка ошибок. Эти механизмы не скрываются за настройками данного класса — их в реализации нет.

Параметры класса и обработка ошибок

Исходный код · AGPL-3.0