Permessi di file statici con Nginx, Gunicorn e Django

Sto tentando di configurare un server Nginx con un server Gunicorn WSGI che esegue Django dietro ..

L'installazione di tutti sembra funzionare tranne che ho un problema di autorizzazioni. Ho impostato alias su / media e una directory statica per la pubblicazione di contenuti statici ma viene generato un errore 403 a less che i file siano di properties; dell'utente nginx.

I file caricati dall'utente Gunicorn ovviamente saranno di properties; di quell'utente specifico che causerà un problema. Potrei aggiungere l'utente nginx al gruppo di utenti gunicorn ma non voglio dare le autorizzazioni coperte di nginx a questi file.

Qual è il metodo suggerito per il caricamento o la generazione di file tramite Gunicorn / Wsgi / Django, ma consente a nginx di servirli senza aggiungere un problema di protezione.

Grazie in anticipo,

  • Determinare i limiti di carica inversa-proxy nginx
  • Problemi con IE / wget confondendo il cert SSL di un sottodominio con il certificato del dominio principale
  • Può nginx essere fatto per memorizzare le risposte a monte contenenti un'intestazione X-Accel-Redirect?
  • Posso utilizzare solo 2 server per il bilanciamento del carico nginx?
  • nginx e referente HTTP
  • Ctriggers richiesta quando si accede tramite HTTPS al sottodominio www usando nginx
  • il modo migliore per eseguire il debug del file di configuration nginx?
  • Architettura Cloud Cloud Reverse Server (AWS + nginx)
  • One Solution collect form web for “Permessi di file statici con Nginx, Gunicorn e Django”

    Le autorizzazioni coperte a questi file non sono necessarie. Nginx ha bisogno solo di un permesso di lettura. Il mio account di nginx è www-data , gunicorn funziona con privilegi www_flask . Nginx serve tutti i file caricati da flask senza problemi.

    Permessi di file ls -lRr /webroot

     /webroot: total 4 drwxr-xr-x 3 www_flask www_flask 4096 Jul 4 13:20 gunicorn /webroot/gunicorn: total 4 drwxr-xr-x 2 www_flask www_flask 4096 Jul 4 14:57 uploads /webroot/gunicorn/uploads: total 924 -rw-rw-r-- 1 www_flask www_flask 164308 Jul 4 14:55 0001.jpg -rw-rw-r-- 1 www_flask www_flask 53917 Jul 4 14:56 0004.jpg -rw-rw-r-- 1 www_flask www_flask 349420 Jul 4 15:07 0005.jpg -rw-rw-r-- 1 www_flask www_flask 365642 Jul 4 14:56 0006.jpg 

    nginx config

     server { listen 127.0.0.1:80; server_name localhost; location / { try_files $uri @gunicorn_proxy; } location /media { alias /webroot/gunicorn/uploads/; } location @gunicorn_proxy { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://127.0.0.1:8000; } } 

    Esempio di caricamento a flask da tutorial /home/www_flask/evironments/flask/myapp/myapp.py

     import os from flask import Flask, request, redirect, url_for from werkzeug import secure_filename UPLOAD_FOLDER = '/webroot/gunicorn/uploads' ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif']) app = Flask(__name__) app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS def uploaded_file(filename): return send_from_directory(app.config['UPLOAD_FOLDER'], filename) @app.route('/', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': file = request.files['file'] if file and allowed_file(file.filename): filename = secure_filename(file.filename) file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) return redirect('media/' + filename) return ''' <!doctype html> <title>Upload new File</title> <h1>Upload new File</h1> <form action="" method=post enctype=multipart/form-data> <p><input type=file name=file> <input type=submit value=Upload> </form> ''' if __name__ == '__main__': app.run(debug=True) 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.