什麼是nginxpython
nginx是一個開源的,支持高性能,高併發的代理服務軟件
nginx不可是一個優秀的web服務軟件,還能夠做爲反想代理和負載均衡,以及緩存服務或使用
爲何使用nginxnginx
支持高併發,能支持幾萬個併發連接
資源消耗少,三萬併發編程開啓10個nginx線程消耗不到200m
能夠作反向代理和負載均衡
支持異步網絡io事件模型epoll
nginx、WSGI、uwsgi、uWSGI、django這幾個關係web
wsgi 自己不是服務器,也不是python模塊,只是一種協議,連接着server 和 App,描述二者之間的規則
uwsgi 和wsgi同樣是通訊協議,是uWSGI服務器的單獨形式,用於自定義傳輸類型
uWSGI 是一個web服務器,實現了WSGI協議,uwsgi協議
nginx web服務器,更加安全,更好的處理靜態資源,緩存功能,負載均衡,配合uWSGI服務器會更加安全
nginx和uWSGI 的意義django
nginx接收到瀏覽器的http請求,將包進行解析,分析url,若是是靜態文件直接訪問用戶給nginx配置靜態文件目錄,若是不是靜態文件,是一個動態請求,nginx會轉發給uwsgi,
uwsgi接到請求會進行處理成wsgi能夠接受的形式,併發給wsgi,wsgi根據請求調用應用程序的某個文件,
某個文件的某個函數處理完會返回給wsgi,wsgi將返回值進行打包,打包成uwsgi可以接受的格式,uwsgi接受wsgi的發送請求,轉發給nginx,nginx最終將返回值返回給瀏覽器
爲何不用uWSGI做爲惟一服務器編程
1 安全問題,程序不能直接被瀏覽器訪問到,而是經過nginx,nginx只開放某個接口,uwsgi自己是內網接口,這樣運維人員在nginx上加上安全性的限制,能夠達到保護程序的做用。
2負載均衡問題,一個uwsgi極可能不夠用,即便開了多個work也是不行,畢竟一臺機器的cpu和內存都是有限的,有了nginx作代理,一個nginx能夠代理多臺uwsgi完成uwsgi的負載均衡。
3靜態文件問題,用django或是uwsgi這種東西來負責靜態文件的處理是很浪費的行爲,並且他們自己對文件的處理也不如nginx好,因此整個靜態文件的處理都直接由nginx完成,靜態文件的訪問徹底不去通過uwsgi以及其後面的東西。
nginx的反向代理和數據轉發區別瀏覽器
反向代理 1.接收請求,完成請求處理 2.接收響應,返回告知響應