Salut,
Effectivement, c'est surement nginx qui n'a pas les droits, mais le 777 est effectivement beurk.
Plusieurs solution je dirais :
1. Mettre les tous les www avec les droits nginx (www-data), et configurer ton ftp avec des virtuals users, comme par exemple :
http://prendreuncafe.com/blog/post/2005/09/12/272-proftpd-et-les-utilisateurs-virtuels
Dans ce cas, tu utiliserais les UID et GID de www-data, l'utilisateur aura donc les droits www-data, mais sera chrooté dans le répertoires que tu lui donnera.
2. Lancer nginx avec les droits des utilisateurs, c'est possible, mais plus contraignant, je trouve.
Il faudra créé un vhost par user, et tous en changeant le root, et ajouté la variable user, par contre je ne suis pas sur que tu puisse jouer avec les sous-domaine sur le même port, donc faudra surement jouer avec un proxy_pass en front.
Donc voila, y'a peux être d'autre solutions