<section xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" version="5.0" xml:id="ssec-binary-cache-substituter"> <title>Serving a Nix store via HTTP</title> <para>You can easily share the Nix store of a machine via HTTP. This allows other machines to fetch store paths from that machine to speed up installations. It uses the same <emphasis>binary cache</emphasis> mechanism that Nix usually uses to fetch pre-built binaries from <uri>https://cache.nixos.org</uri>.</para> <para>The daemon that handles binary cache requests via HTTP, <command>nix-serve</command>, is not part of the Nix distribution, but you can install it from Nixpkgs: <screen> $ nix-env -i nix-serve </screen> You can then start the server, listening for HTTP connections on whatever port you like: <screen> $ nix-serve -p 8080 </screen> To check whether it works, try the following on the client: <screen> $ curl http://avalon:8080/nix-cache-info </screen> which should print something like: <screen> StoreDir: /nix/store WantMassQuery: 1 Priority: 30 </screen> </para> <para>On the client side, you can tell Nix to use your binary cache using <option>--option extra-binary-caches</option>, e.g.: <screen> $ nix-env -i firefox --option extra-binary-caches http://avalon:8080/ </screen> The option <option>extra-binary-caches</option> tells Nix to use this binary cache in addition to your default caches, such as <uri>https://cache.nixos.org</uri>. Thus, for any path in the closure of Firefox, Nix will first check if the path is available on the server <literal>avalon</literal> or another binary caches. If not, it will fall back to building from source.</para> <para>You can also tell Nix to always use your binary cache by adding a line to the <filename linkend="sec-conf-file">nix.conf</filename> configuration file like this: <programlisting> binary-caches = http://avalon:8080/ https://cache.nixos.org/ </programlisting> </para> </section>