Domanda

Sto usando Django come web framework e poi Apache e Lighttpd come web server e media server statici rispettivamente. Lighty serve bene tutti i miei contenuti statici, ma devo configurarli per servire i nuovi file caricati dall'utente. Lighttpd è in esecuzione su una macchina diversa da quella di Apache (Django). Il mio codice django di creare una directory e quindi creare un file di immagine viene eseguito sul mio computer Apache, rendendolo attualmente salvato nello stesso computer stesso. Voglio che questa directory e la creazione dei file avvengano sul mio media server statico, che dovrebbe essere servito dal media server stesso. Sto usando rispettivamente le funzioni os.mkdir e urllib.urlretrieve per creare directory e salvare file sulla macchina Django (Apache). Esiste comunque un modo per modificare la configurazione per far funzionare queste cose o devo scrivere script sul media server e chiamarli dalla macchina Django ??

È stato utile?

Soluzione

La risposta più semplice è che l'utente carica in una directory condivisa a cui entrambi i server web possono accedere. Quindi è immediatamente disponibile. Se si utilizza unix (sembra simile), NFS è una possibile soluzione. Se ritieni che il tuo sito verrà ridimensionato su più server alla flickr, utilizzare rsync per eseguire il push su più server perimetrali e possibilmente implementare uno schema di sharding è un'altra soluzione.

Stai solo attento. Ci sono molti problemi di sicurezza che devi considerare a seconda della tua app.

Se tutti i file vanno in una directory accessibile pubblicamente, potrebbe essere possibile per gli utenti indovinare i nomi dei file di altre persone e scaricarli. In tal caso, ti consigliamo di servirli da Django con un sottile livello di sicurezza in cima.

Non fidarti mai dei tuoi utenti! Verifica che ciò che caricano sia in un determinato set consentito. In nessun caso dovresti consentire loro di caricare ciò che vogliono. A meno che ovviamente i tuoi utenti non siano pochi. Anche allora dovresti fare dei controlli. Probabilmente non dovrebbero caricare file .php per uno. L'ultima cosa che vuoi dare loro è la possibilità di eseguire script arbitrari sul tuo server. Almeno configura la directory per servire solo i file e non eseguire nulla.

Buona fortuna

Altri suggerimenti

Questo è il tipo di cose per cui uso rsync. Fai quello che ti piace sul server principale e poi periodicamente (o su richiesta) rsync spingere sul server statico. Rsync è più veloce (e più ricco di funzionalità) di qualsiasi cosa tu possa produrre con un hack rapido.

Solo perché sono paranoico, eseguo rsync orarie di tutti i siti dei miei clienti su 2 server di backup, uno dei quali è nel mio garage. Ho appena cronometrato un & Quot; rsync -a & Quot; contro un sito di 1,7 GB di clienti (che non ha subito modifiche) e sono stati necessari 9,92 secondi di tempo per l'orologio da parete, inclusi i 3 handshake di rete per la sincronizzazione di 3 diverse directory. Se qualcosa fosse cambiato, presto-bango, è fatto, completo di timestamp, proprietario / gruppo, ecc.

È incredibile come blas & # 233; si può verificare un errore del server quando si ottiene un funzionamento di backup vero, multi-macchina e non coinvolto dall'uomo. Dormo davvero bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top