Perché è consigliabile distribuire un'app Flask utilizzando Apache o Nginx? Ha un server integrato, non può essere distribuito semplicemente eseguendo python app.py
e aprendo le porte corrette nel firewall?Perché Flask non dovrebbe essere distribuito con il server integrato?
risposta
Il server WSGI di Werkzeug non è destinato all'uso in produzione. Viene fornito come comodità durante lo sviluppo. Non è stato sviluppato pensando alla sicurezza o alle prestazioni (per impostazione predefinita gestisce solo una richiesta alla volta). Utilizzare un server di applicazioni WSGI reale come uWSGI o Gunicorn per le prestazioni e inoltrarlo tramite un server Web reale come Nginx per prestazioni e sicurezza. I server Web sono in grado di rispondere alle richieste/risposte di accodamento, possono servire allo stesso tempo contenuto statico e di altro tipo e sono progettati per gestire SSL. I server WSGI sono in grado di coordinare più richieste in tutta l'app in modo efficiente. Werkzeug è stato progettato come libreria WSGI, non come server Web o server WSGI.
Il docs indica direttamente di non utilizzare il server di sviluppo in produzione.
È possibile utilizzare il server integrato durante lo sviluppo, ma è necessario utilizzare un'opzione di distribuzione completa per le applicazioni di produzione. (Non utilizzare il server di sviluppo integrato nella produzione.)
Inoltre, i server web come root (quindi cadere uscita), in modo da poter ascoltare sulle porte standard 80 e 443. Si dovrebbe mai eseguire un applicazione come root, e quindi si sarebbe in grado di collegarsi solo a porte superiori a 1024, quindi gli utenti dovrebbero conoscere la porta piuttosto che il dominio.
"Non si dovrebbe mai eseguire un'applicazione come root"
questo non ha senso di sorta. nginx per impostazione predefinita viene eseguito anche come root. se si esegue il pallone come root, almeno si può servire la porta 80, che è molto difficile da ottenere in caso contrario.
- 1. Perché questo non dovrebbe essere compilato?
- 2. Docker con server integrato php
- 3. NullPointerException con ArrayList - non dovrebbe essere possibile?
- 4. Il distributore Token AWS dovrebbe essere distribuito sulla propria istanza o posso unirlo con la mia istanza app?
- 5. Mule ESB può essere distribuito in Application Server
- 6. Come funziona Flask-login con più server
- 7. Server Web incorporato con parser XML integrato
- 8. Perché un TypedArray dovrebbe essere riciclato?
- 9. Perché il mio Heroku app vuoto quando ho clonarlo (dovrebbe essere parse-server)
- 10. Cosa dovrebbe essere OO e cosa non dovrebbe?
- 11. Perché dovrebbe essere (ogni? Stringa? []) Vero?
- 12. Perché il modello di osservatore dovrebbe essere deprecato?
- 13. Perché la classe Singleton dovrebbe essere sigillata?
- 14. Perché la chiamata # dell'applicazione dovrebbe essere lenta?
- 15. java: perché non dovrebbe essere permesso di sfuggire al costruttore?
- 16. Utilizzo di phpdbg con il server php integrato?
- 17. Perché dovrebbe @@ class_variables essere evitato in Ruby?
- 18. Perché una funzione virtuale dovrebbe essere privata?
- 19. Perché il mio web.xml distribuito da Tomcat non viene letto dal server host?
- 20. Utilizzo del server integrato PHP in produzione
- 21. Quando dovrebbe essere una classe .NET Override()? Quando non dovrebbe?
- 22. ModelState.IsValid anche quando non dovrebbe essere?
- 23. F #: L'operatore '&' non dovrebbe normalmente essere ridefinito
- 24. Come progettare un server web node.js distribuito
- 25. Perché l'archivio eventi dovrebbe essere sul lato scrittura?
- 26. SQL Server - Perché il mio SPID dovrebbe essere "SUSPENDED" ma non bloccato durante la creazione di un indice?
- 27. rails 4.1 non può essere distribuito tramite capistrano 3
- 28. WebDeploy con MSBuild non distribuito da TeamCity
- 29. Dove dovrebbe essere Android.mk?
- 30. GCC - non dovrebbe essere emesso un avviso?
Questa è la tua opinione, anche molto male potrei aggiungere. – ishaan