Как валидно настроить права для nginx и php-fpm?
Nginx тут не при чем. Это настраивается в пуле PHP-FPM.
PHP-FPM
[{{ username }}]
user = {{ username }}
group = {{ username }}
listen = /var/run/php/php{{ php }}-fpm-{{ username }}.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
;php_flag[display_errors] = off
php_admin_value[error_log] = /var/www/{{ username }}/logs/fpm-php.{{ username }}.log
;php_admin_flag[log_errors] = on
;php_admin_value[memory_limit] = 32M
php_admin_value[upload_max_filesize] = 100M
php_admin_value[post_max_size] = 100M
php_admin_value[open_basedir] = /var/www/{{ username }}/
php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source,stream_set_write_buffer,stream_socket_sendto,highlight_file,com_load_typelib
php_admin_value[upload_tmp_dir] = /var/www/{{ username }}/tmp
php_admin_value[soap.wsdl_cache_dir] = /var/www/{{ username }}/tmp
Nginx
server {
	listen 80;
	#listen [::]:80 default_server ipv6only=on;

	root /var/www/{{ username }}/www;
	index index.php index.html index.htm;

	server_name {{ domain }};

	location / {
		try_files $uri $uri/ =404;
        if (!-e $request_filename) {
        rewrite ^/(.*)$ /index.php?q=$1 last;
	    }
	}

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		fastcgi_pass unix:/run/php/php{{ php }}-fpm-{{ username }}.sock;
		include fastcgi_params;
	}
	client_max_body_size 100M;
}

1. Все файлы и папки от пользователя jack:jack, с правами 644 на файлы и 755 на директории.
2. Все директории, куда может писать сайт - создать от пользователя www-data:Jack, с теми же правами.
В целом, куда сайт должен писать - от www-data, куда не должен - прав не должно быть на уровне файловой системы.