什么是nginx
nginx是一個開源的,支持高性能,高並發的代理服務軟件
nginx不但是一個優秀的web服務軟件,還可以作為反想代理和負載均衡,以及緩存服務或使用
為什么使用nginx
支持高並發,能支持幾萬個並發鏈接
資源消耗少,三萬並發編程開啟10個nginx線程消耗不到200m
可以做反向代理和負載均衡
支持異步網絡io事件模型epoll
nginx、WSGI、uwsgi、uWSGI、django這幾個關系
wsgi 本身不是服務器,也不是python模塊,只是一種協議,鏈接着server 和 App,描述兩者之間的規則
uwsgi 和wsgi一樣是通信協議,是uWSGI服務器的單獨形式,用於自定義傳輸類型
uWSGI 是一個web服務器,實現了WSGI協議,uwsgi協議
nginx web服務器,更加安全,更好的處理靜態資源,緩存功能,負載均衡,配合uWSGI服務器會更加安全
nginx和uWSGI 的意義
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.接收響應,返回告知響應