Uwsgi Nginx Apache select poll epoll

 

uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的做用是與uWSGI服務器進行交換。
要注意 WSGI / uwsgi / uWSGI 這三個概念的區分。
WSGI是一種通訊協議。
uwsgi是一種線路協議而不是通訊協議,在此經常使用於在uWSGI服務器與其餘網絡服務器的數據通訊。
而uWSGI是實現了uwsgi和WSGI兩種協議的Web服務器。
uwsgi協議是一個uWSGI服務器自有的協議,它用於定義傳輸信息的類型(type of information),每個uwsgi packet前4byte爲傳輸信息類型描述,它與WSGI相比是兩樣東西。python

 

在本地的虛擬環境中,項目根目錄下,執行命令收集全部包
pip freeze > plist.txt
經過ftp軟件將開發好的項目上傳到此服務器的某個目錄
安裝並建立虛擬環境,若是已有則跳過此步
sudo apt-get install python-virtualenv
python -m venv 11_venv [虛擬環境名稱] nginx

在虛擬環境上工做,安裝全部須要的包
source / 11_venv/bin/active
pip install -r plist.txt web

更改settings.py文件
DEBUG = False
ALLOW_HOSTS=['*',]表示能夠訪問服務器的ip 算法

啓動服務器,運行正常,可是靜態文件沒法加載
1:uWSGI
uWSGI實現了WSGI的全部接口,是一個快速、自我修復、開發人員和系統管理員友好的服務器
安裝uWSGI
pip install uwsgi django

注(安裝遇到的錯誤):pip install uwsgi安裝uwsgi出錯
若是之前修改過電腦的python版本,可能安裝失敗,這是Python版本形成的,
終端輸入 python,看電腦用的哪一個版本(個人是python3.5)
那麼安裝3.5的python-dev,大概幾分鐘
sudo apt-get install libpython3.5-dev vim

再次執行
pip install uwsgi 瀏覽器

安裝成功
配置uWSGI,在項目中新建文件uwsgi.ini,編寫以下配置
[uwsgi]
socket=127.0.0.1:端口(使用nginx鏈接時,使用socket)
#http=外網ip:端口(直接作web服務器,使用http)
chdir=項目根目錄
wsgi-file=項目中wsgi.py文件的目錄,相對於項目根目錄
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log 緩存

個人配置參考
[uwsgi]
socket=10.212.63.20:8000
#http=127.0.0.1:8000
chdir=/home/shihao/Desktop/bushulianxi/test7
wsgi-file=test7/wsgi.py
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log 服務器

啓動:uwsgi --ini uwsgi.ini (須要在項目目錄下執行,注意ini前面是兩個-)
中止:uwsgi --stop uwsgi.pid
重啓:uwsgi --reload uwsgi.pid
結果:使用http協議查看網站運行狀況,運行正常,可是靜態文件沒法加載
2:使用nginx
nginx的做用:
負載均衡:多臺服務器輪流處理請求
反射代理:隱藏真實服務器
實現構架:客戶端請求nginx,再由nginx請求uwsgi,運行django框架下的python代碼
nginx+uwsgi也能夠用於其它框架的python web代碼,不限於django
到官網下載nginx壓縮文件或經過命令安裝
sudo apt-get install nginx 網絡

默認安裝到/usr/local/nginx/sbin/目錄(個人在/usr/sbin下),**注意:最好進入此目錄執行命令**
查看版本:sudo nginx -v
啓動:sudo nginx
中止:sudo nginx -s stop
重啓:sudo nginx -s reload
經過瀏覽器查看nginx運行結果

一些注意:
#若是nginx沒有安裝在默認目錄,能夠搜索nginx的安裝目錄
sudo ps -ajx | grep nginx

#查看nginx.conf配置文件目錄(需先進入安轉目錄)
sudo nginx -t

#若是80端口被佔用,使用命令關閉佔用80端口的程序
sudo fuser -k 80/tcp

指向uwsgi項目:編輯nginx.conf文件(個人在/etc/nginx下)
sudo vim nginx.conf

在server下添加新的location項,指向uwsgi的ip與端口
location / {
include uwsgi_params;將全部的參數轉到uwsgi下
uwsgi_pass uwsgi的ip與端口;
}

注意:原來nginx.conf有兩行必須註釋掉。
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

修改uwsgi.ini文件,啓動socket,禁用http
重啓nginx、uwsgi
結果:在瀏覽器中查看項目,發現靜態文件加載不正常,接下來解決靜態文件的問題
3:處理靜態文件
靜態文件一直都找不到,如今終於能夠解決了
全部的靜態文件都會由nginx處理,不會將請求轉到uwsgi
配置nginx的靜態項,打開conf/nginx.conf文件,找到server,添加新location
location /static {
alias /var/www/test5/static/; #注:地址是本身隨便定的
}

在服務器上建立目錄結構「/var/www/test5/」
cd /var/www
mkdir test5
cd test5
mkdir static
sudo chmod 777 static

修改settings.py文件
STATIC_ROOT='/var/www/test5/static/'
STATIC_URL='/static/'

收集全部靜態文件到static_root指定目錄:python manage.py collectstatic
此時能夠發現靜態文件都存在了/var/www/test5/static 文件夾下
重啓nginx、uwsgi

 

 

 

 

Linux中高級IO多路轉接中select、poll和epoll的優缺點,select和poll的缺點以及epoll的優勢。

1、select的缺點:

一、編寫難度大

二、同時處理的文件描述符是有上限的

三、每次須要從新設定fd集合

四、性能會隨用戶的增多而效率下降

五、輸入輸出參數在一塊兒
select的幾大缺點:
(1)每次調用select,都須要把fd集合從用戶態拷貝到內核態,這個開銷在fd不少時會很大
(2)同時每次調用select都須要在內核遍歷傳遞進來的全部fd,這個開銷在fd不少時也很大
(3)select支持的文件描述符數量過小了,默認是1024

2、poll的缺點

poll是對select的一種改良,最突出的改良有兩點:

一、文件描述符數量沒有上限

二、將輸入輸出參數進行分離,不用每次設定

那麼poll的缺點是:

poll中監聽的文件描述符數目增多時:

一、和select同樣,poll返回後,須要輪詢pollfd來獲取就緒的描述符

二、每次調用poll都須要大把大量客戶端在一時刻可能只有不多的處於就緒狀態,所以隨着監視的描述符數量的增加,其效率也會線性降低。

3、epoll的優勢:

一、文件描述符數目沒有上限:經過epoll_ctl()來註冊一個文件描述符,內核中使用紅黑樹的數據結構來管理全部須要監控的文件描述符。

二、基於事件就緒通知方式:一旦被監聽的某個文件描述符就緒,內核會採用相似於callback的回調機制,迅速激活這個文件描述符,這樣隨着文件描述符數量的增長,也不會影響斷定就緒的性能。

三、維護就緒隊列:當文件描述符就緒,就會被放到內核中的一個就緒隊列中,這樣調用epoll_weit獲取就緒文件描述符的時候,只要取隊列中的元素便可,操做的時間複雜度恆爲O(1)。

四、關於有些地方說:epoll還有內存映射機制,即內核將就緒隊列經過mmap的方式映射到用戶態,避免了拷貝內存這樣的額外性能開銷。關於這一點,我並不認爲這是epoll的優勢,由於他和epoll底層工做方式相悖。mmap是一種共享內存,可是咱們都知道共享內存中一旦有數據,用戶就能直接看到,而且使用,可是epoll_wait在取數據時傳入了一塊緩存區這是和貢獻內存相悖的其一;其二是操做系統並不相信任何人,尤爲是用戶,它不會讓用戶直接去取內核中的數據。

 


文件系統是操做系統用於明確存儲設備(常見的是磁盤,也有基於NAND Flash的固態硬盤)或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操做系統中負責管理和存儲文件信息的軟件機構稱爲文件管理系統,簡稱文件系統。文件系統由三部分組成:文件系統的接口,對對象操縱和管理的軟件集合,對象及屬性。從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲並對存入的文件進行保護和檢索的系統。具體地說,它負責爲用戶創建文件,存入、讀出、修改、轉儲文件,控制文件的存取,當用戶再也不使用時撤銷文件等。


UTF-8 國際組織 3字節
GBK 防本土 2字節

哈希密碼:密鑰 加顏 不可逆算法

put 修改所有patch 指定修改getposthead

相關文章
相關標籤/搜索