So I recently upgraded to NixOS 19.09, and one of the changes was a greatly improved phpfpm configuration, which also forced be to redo my configuration. I took the opportunity to make it a bit more elegant.

{ config, lib, pkgs, ... }:
let
  pmSettings = {
    "pm" = "dynamic";
    "pm.max_children" = 32;
    "pm.max_requests" = 500;
    "pm.start_servers" = 4;
    "pm.min_spare_servers" = 4;
    "pm.max_spare_servers" = 9;
    "listen.owner" = "nginx";
    "listen.group" = "nginx";
  };
in
{
  services.phpfpm.pools."baz" = {
    user = "baz";
    group = "baz";

    settings = {
      "request_terminate_timeout" = 300;
    } // pmSettings;

    phpOptions = "max_execution_time = 300";
  };

  services.phpfpm.pools."foobar" = {
    user = "foobar";
    group = "foobar";

    settings = pmSettings;
  };
};

So I have this common php-fpm configuration, pmSettings, which is used for both pools. But for the baz pool, I create a new configuration set that I extend with pmSettings to form something new.

Here’s a part of a nginx configuration used for pool baz from above:

locations."~ \.php$" = {
  extraConfig = ''
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:${config.services.phpfpm.pools.baz.socket};
    fastcgi_index index.php;
    fastcgi_read_timeout 300;
  '';
};

I think that the configuration above is vulnerable to yet another fsck-up in PHP. So…be careful.