Newsgroup: it.comp.os.linux.sys
Titolo: nginx: separare gli utenti

Ciao a tutti,
 
sto provando nginx, ma trovo enormi difficoltà a fargli digerire la 
separazione tra utenti.
 
Su apache ho installato mpm_itk e faccio il pipe dei log verso rotatelogs, 
e fa tutto "da solo" (esegue il virtualhost e quindi php come utente non 
privilegiato, salva i log in una cartella nella home degli utenti, ruota 
i log a mezzanotte precisa).
 
Con nginx finora ho dovuto, per ogni vhost:
 
- creare un nuovo pool php-fpm
- dare chgrp www-data; chmod g+s alla ~/www e alla ~/logs dell'utente
- riavviare sia nginx che php5-fpm
 
Rimane il problema di ruotare i log. Tutti consigliano di usare logrotate, 
ma dovrei configurare anche qui un file ogni nuovo virtualhost.
 
E manca ancora integrare ftp senza far impazzire gli utenti con i 
permessi dei file e delle directory.
 
Oltre al fatto che ho comunque in memoria un tot di processi fpm 
potenzialmente inutili (se non c'è traffico su quel sito) per ogni vhost. 
Con qualche centinaio di vhost iniziano a diventare poco gestibili.
 
La procedura da fare per ogni virtualhost (potenzialmente modificare 3 
file in luoghi diversi, e configurare i permessi ad hoc) mi sta facendo 
seriamente pensare di tornare ad apache.
 
C'è una soluzione più semplice?
 
Grazie.
Bye.

 
 
Si.
Usa Nginx come frontend (per fargli gestire i files statici), ed usa 
Apache come backend dietro http proxy per servire i contenuti dinamici.
 
Per mantenere le cose gestibili ti consiglio:
 
1) Aggiungi una direttiva upstream tipo:
 
   upstream apache  {
       server localhost:8080;
   }
 
   Non è necessario (visto che userai solo una instanza di Apache), ma hai
   il vantaggio di poter usare un nome per riferirti ad Apache.
 
2) Crea uno script per aggiungere facilmente un virtual host.
   Lo script non deve fare altro che creare una direttiva
 
   server {
      ...
   }
 
   dove devi mappare le varie URL per gestire i contenuti dinamici
   tramite il backend apache e quelli statici tramite Nginx, oltre al
   logging.
 
   Probabilmente dovresti lasciare la possibilità agli utenti di
   personalizzare la configurazione
   all'utente.
 
 
Comunque non so quanto ti convenga far gestire *tutti* i virtualhost ad 
Apache.
 
 
Ciao  Manlio

 - dare chgrp www-data; chmod g+s alla ~/www e alla ~/logs dell'utente
 
Perchè non usi le ACL?
 
Basta un semplice:
 
setfacl -d -m u:www-data:w /home
 
e sei a posto, senza dover più toccare nulla.
 
 
Ciao  Manlio

 e sei a posto, senza dover più toccare nulla.
 
Non ho mai usato le ACL, ma mi pare di capire che quella dà il permesso a 
www-data di fare quello che vuole (o quasi) nelle home degli utenti.
 
Rimane il problema che tutto gira come www-data, quindi lo script PHP di 
utente1 può andare a leggere il file delle password DB di utente2, ed è 
quello che voglio evitare.
 
Comunque sono tornato ad Apache. Sarà più pesante ma in questo caso ne 
esce decisamente vincitore.
Reggeva una settantina di vhost su un P4 2 GHz con 2 GB di RAM, ora 
abbiamo quintuplicato gli accessi e quasi raddoppiato i vhost, ma abbiamo 
uno xeon 8 core con 8 GB. Il carico medio è 0.30, più o meno.
Ci costa meno aumentare l'hardware che "perdere tempo" a configurare per 
cercare di ottimizzare.
 
Bye.

 Bye.
 
 
Ciao  Manlio