This story was originally published on HackerNoon at:
https://hackernoon.com/streaming-zip-archives-on-the-fly-with-nginx-mod_zip-no-disk-no-buffers-no-problem.
How we stream ZIP archives on the fly at scale using nginx + mod_zip — no disk writes, no buffering, with local and remote files in a single archive.
Check more stories related to programming at:
https://hackernoon.com/c/programming.
You can also check exclusive content about
#nginx,
#zip,
#php,
#architecture,
#performance,
#file-handling,
#backend,
#hackernoon-top-story, and more.
This story was written by:
@dmitriistarikov. Learn more about this writer by checking
@dmitriistarikov's about page,
and for more stories, please visit
hackernoon.com.
Instead of downloading files to disk, computing checksums, and building a ZIP before serving it, we use nginx + mod_zip to stream archives directly to the client. PHP returns a short manifest listing file URLs and sizes — nginx fetches each file via internal subrequests and pumps them into a ZIP stream in real time. No temp files, no buffering, no waiting. The main gotcha: file sizes are required upfront (ZIP format constraint), which is trivial for local files and requires a HEAD request for remote ones. We hit a production incident caused by zero sizes in metadata from an external team — silent broken archives, hard to debug because mod_zip subrequests don't surface in normal log pipelines.