Skip to content

Fix/swoole trusted proxies per request - #195

Open
outcomer wants to merge 5 commits into
php-runtime:mainfrom
outcomer:fix/swoole-trusted-proxies-per-request
Open

Fix/swoole trusted proxies per request#195
outcomer wants to merge 5 commits into
php-runtime:mainfrom
outcomer:fix/swoole-trusted-proxies-per-request

Conversation

@outcomer

Copy link
Copy Markdown

Re-resolve trusted proxies per request in Swoole runner

Symfony's Kernel resolves trusted_proxies (including the REMOTE_ADDR
sentinel) once at boot(), which under Swoole's long-lived workers
means every request after the first keeps whatever REMOTE_ADDR was
seen at that one moment — silently breaking proxy trust, and with it
X-Forwarded-Proto-based scheme detection, for the rest of the
worker's life.

SymfonyRunner::handle() now re-applies TRUSTED_PROXIES/TRUSTED_HEADERS
from the environment before every request, using that request's own
REMOTE_ADDR for the sentinel.

Hardcoded 4096-byte ob_start() threshold starves SSE — small, time-spaced
writes never reach the client until the buffer fills or the response ends.
Adds a `streamed_response_chunk_size` ServerFactory option (default 4096,
unchanged behavior), grouped into a BridgeOptions value object.
Symfony's Kernel resolves trusted_proxies (including the REMOTE_ADDR
sentinel) once at boot(), which under Swoole's long-lived workers
means every request after the first keeps whatever REMOTE_ADDR was
seen at that one moment — silently breaking proxy trust, and with it
X-Forwarded-Proto-based scheme detection, for the rest of the
worker's life.
SymfonyRunner::handle() now re-applies TRUSTED_PROXIES/TRUSTED_HEADERS
from the environment before every request, using that request's own
REMOTE_ADDR for the sentinel.
@outcomer
outcomer marked this pull request as ready for review August 17, 2026 16:23
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@outcomer