fix: eliminate SSE buffering through Nginx proxy

Add 2 KB padding comment after headers to push past proxy buffer
threshold, enable TCP_NODELAY on the socket, and remove erroneous
chunked_transfer_encoding off from Nginx that caused full response
buffering.
This commit is contained in:
vakabunga
2026-03-14 17:30:52 +03:00
parent e28d0f46d0
commit aaf8cacf75
2 changed files with 11 additions and 1 deletions

View File

@@ -32,6 +32,15 @@ function sseWrite(res: import('express').Response, data: Record<string, unknown>
res.write(`data: ${JSON.stringify(data)}\n\n`); res.write(`data: ${JSON.stringify(data)}\n\n`);
} }
/**
* Send a 2 KB comment block to push past any proxy buffering threshold.
* Nginx and other reverse proxies often buffer the first few KB before
* starting to stream — this padding forces the initial flush.
*/
function ssePadding(res: import('express').Response) {
res.write(`: ${' '.repeat(2048)}\n\n`);
}
const router = Router(); const router = Router();
router.post( router.post(
@@ -60,7 +69,9 @@ router.post(
res.setHeader('Cache-Control', 'no-cache'); res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive'); res.setHeader('Connection', 'keep-alive');
res.setHeader('X-Accel-Buffering', 'no'); res.setHeader('X-Accel-Buffering', 'no');
res.socket?.setNoDelay(true);
res.flushHeaders(); res.flushHeaders();
ssePadding(res);
try { try {
const converted = await convertPdfToStatementStreaming( const converted = await convertPdfToStatementStreaming(

View File

@@ -15,7 +15,6 @@ server {
proxy_connect_timeout 5s; proxy_connect_timeout 5s;
proxy_read_timeout 600s; proxy_read_timeout 600s;
proxy_buffering off; proxy_buffering off;
chunked_transfer_encoding off;
client_max_body_size 15m; client_max_body_size 15m;
} }