欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

跨過Nginx上基于uWSGI部署Django項目的坑-創(chuàng)新互聯(lián)

先說說他們的關(guān)系,Nginx和uWSGI都是Web服務器,Nginx負責靜態(tài)內(nèi)容,uWSGI負責Python這樣的動態(tài)內(nèi)容,二者配合共同提供Web服務以實現(xiàn)提高效率和負載均衡等目的。uWSGI實現(xiàn)了多個協(xié)議,如WSGI,HTTP協(xié)議,還有它自己的uwsgi協(xié)議,想了解更多關(guān)于uWSGI和uwsgi協(xié)議內(nèi)容可以查閱這里。這樣和fastcgi類似,請求和響應的流程如下:

創(chuàng)新互聯(lián)是專業(yè)的耿馬網(wǎng)站建設(shè)公司,耿馬接單;提供成都網(wǎng)站設(shè)計、成都做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行耿馬網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

Request > Nginx > uWSGI > Django > uWSGI > Nginx > Response

請求先交由Nginx,如果是靜態(tài)內(nèi)容就自己處理了,如果是動態(tài)內(nèi)容就交給uWSGI服務器,uWSGI服務器處理整個Django項目的Python代碼,響應請求,原路返回,但是與fastcgi不同,Nginx、uWSGI和Django可以獨立部署,然后整合。那么我們從Django開始,這里的服務器環(huán)境是Ubuntu 16.10。

1. 部署Django的項目

安裝Python和Django,Ubuntu自帶2.7和3.5版本的Python,安裝相應的Django版本,注意在Ubuntu中不同版本Python都有相應的命令

跨過Nginx上基于uWSGI部署Django項目的坑

www@cloud-vm-ub01:~$ python --version
Python 2.7.12+www@cloud-vm-ub01:~$ python3 --version
Python 3.5.2+www@cloud-vm-ub01:~$ pip -V
pip 9.0.1 from /home/wisesoe/.local/lib/python2.7/site-packages (python 2.7)
www@cloud-vm-ub01:~$ pip3 -V
pip 9.0.1 from /home/wisesoe/.local/lib/python3.5/site-packages (python 3.5)

pip3 install django

跨過Nginx上基于uWSGI部署Django項目的坑

將已經(jīng)完成開發(fā)的Django項目pro(pro是Django項目名)拷貝到服務器,這里拷貝到了www用戶(www是服務器可登錄用戶名)路徑下,最后相對路徑是~/work/project/pro,絕對路徑是/home/www/project/pro

進入以上目錄,使用Django的內(nèi)置服務器測試看看pro項目是否運行正常。

python3 ./manage.py runserver 127.0.0.1:8080

2. 部署uWSGI服務器

通過pip安裝uWSGI。

pip3 install uwsgi

測試uWSGI是否正常,在~/work/project/pro目錄中創(chuàng)建一個測試用的Python文件uwsgi_test.py

def application(env, start_response):
        start_response('200 OK',[('Content-Type', 'text/html')])        #return ['Hello world'] # Python2
        return [b'Hello world'] # Python3

在pro項目路徑下,基于HTTP協(xié)議運行uWSGI,如果uWSGI安裝正常的話,可以在瀏覽器中訪問9090端口,看到Hello world字樣

uwsgi --http 127.0.0.1:9090 --wsgi-file uwsgi_test.py

接下來啟動uWSGI加載Django項目,這里依然使用HTTP協(xié)議,將指向具體Python文件--wsgi-file參數(shù)替換為指向Django項目的--module參數(shù),參數(shù)的值pro.wsgi指向~/work/project/pro/pro/wsgi.py模塊,如果正常可以在瀏覽器http://127.0.0.1:9090端口打開了項目,但是靜態(tài)文件路徑有問題,不過沒關(guān)系后面再處理。

www@cloud-vm-ub01:~/work/project/pro$ uwsgi --http 127.0.0.1:9090 --module pro.wsgi

對于uWSGI服務器的配置,如上命令加上很多參數(shù)非常麻煩,可以寫成配置文件的方式,在~/work/project/pro中創(chuàng)建一個配置文件uwsgi.ini,注釋掉參數(shù)暫時忽略,Django 1.4以前的版本需要配置如env,pythonpath等參數(shù),這里不再深究了。

其中http參數(shù)用于以上測試,而與Nginx交互需要使用socket參數(shù),即使用TCP協(xié)議,WSGI和uwsgi協(xié)議都在TCP協(xié)議之上。socket參數(shù)也可以配置為網(wǎng)絡(luò)地址,如socket=127.0.0.1:7070,但如果Nginx和uWSGI同在一個服務器上,可以使用socket文件的形式。chmod-socket是為了動態(tài)配置socket文件的權(quán)限,因為socket文件會在每次uWSGI啟動時被重新創(chuàng)建。

跨過Nginx上基于uWSGI部署Django項目的坑

[uwsgi]http=127.0.0.1:8000#socket=/home/www/work/project/pro/nginx_uwsgi.socket
chdir=/home/www/work/project/pro/
#chmod-socket=664master=true
processes=4threads=2module=pro.wsgi
#wsgi-file=uwsgi_test.py
#stats=127.0.0.1:9000

跨過Nginx上基于uWSGI部署Django項目的坑

通過下面命令同樣可以啟動uWSGI加載Djiango項目

uwsgi --ini uwsgi.ini

3. 部署Nginx服務器

通過apt安裝Nginx

sudo apt install nginx

Nginx可以通過以下命令控制。正常安裝和啟動Nginx后,通過http://127.0.0.1:80可以看到Nginx的歡迎頁

sudo service nginx startsudo service nginx stopsudo service nginx restart

接下來修改配置Nginx配置與uWSGI服務器交互。Nginx的主要配置文件在/etc/nginx/nginx.conf和sites-enabled文件夾里,nginx.conf是全局設(shè)置,sites-enabled文件夾里的可以針對不同站點進行配置,其中有個默認的default配置文件,該文件其實是sites-available文件夾里的default文件的軟鏈接,sites-avaliable像個倉庫,但只有sites-enabled里的才有效。我們可以將sites-enabled的default刪除,再cp一份sites-available的default到sites-enabled里重名為nginx-pro,同時cp /etc/nginx/uwsgi_params ~/work/project/pro里以備nginx-pro配置文件調(diào)用。

跨過Nginx上基于uWSGI部署Django項目的坑

#nginx-pro

upstream django{
        server unix:///home/wisesoe/Work/Project/Python/duty/nginx_uwsgi.sock; # file socket
        #server 127.0.0.1:7070; # TCP socket
}


server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        server_name 127.0.0.1; # IP or FQDN

        location /static {
                alias /home/www/work/project/pro/static;
        }

        location / {
                uwsgi_pass django;
                include /home/www/work/project/pro/uwsgi_params;
                #try_files $uri $uri/ =404;
        }
}

跨過Nginx上基于uWSGI部署Django項目的坑

uwsgi_params文件是Nginx向uWSGI傳遞的參數(shù),uwsgi_pass的意思動態(tài)內(nèi)容請求都通過名為django的upstream傳遞給uWSGI,這使用文件socket的方式,那么與之前uwsgi.ini里的socket參數(shù)配置一致。

4. Nginx權(quán)限問題

以上全部配置完成了,但是還有一個重要的權(quán)限問題,如果啟動uWSGI和Nginx(以下需要兩個終端窗口,因為uwsgi命令會占據(jù)一個),會報錯

uwsgi --ini uwsgi.inisudo service nginx restart

在/var/log/nginx/error.log中會看到Permission denied字樣,是對home/www/work/project/pro/nginx_uwsgi.socket文件沒有讀寫權(quán)限,即運行Nginx工作進程的用戶需要socket文件的讀寫權(quán)限。

運行Nginx的工作進程的用戶在/etc/nginx/nginx.conf中有配置,是user的值www-data,但查看/etc/group發(fā)現(xiàn)www-data是個用戶組

跨過Nginx上基于uWSGI部署Django項目的坑

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

跨過Nginx上基于uWSGI部署Django項目的坑

我們可以將www用戶加入該用戶組

usermod -G www-data www

也可以將socket文件及其上級目錄pro的用戶組改為www-data,并為該用戶組授予讀寫權(quán)限

chown :www-data ~/home/work/project/prochown :www-data ~/home/work/project/pro/nginx_uwsgi.socketchmod g+rw ~/home/work/project/pro/nginx_uwsgi.socket

5.Nginx和Django靜態(tài)文件處理

Django項目可以正常打開,但是靜態(tài)文件引用路徑還有問題,在Django開發(fā)時Django自己可以正確處理靜態(tài)文件的路徑,但是部署后Nginx去無法找到靜態(tài)文件路徑。

檢查Nginx配置文件夾sites-enabled里的nginx-pro文件,確保里面默認的try_files要刪掉或者注釋掉,否則Nginx會因此檢查靜態(tài)文件是否存在。

將Django的靜態(tài)文件集中起來,Django為此有專門的工具

現(xiàn)在Django的Settings文件中加上StATIC_ROOT,把靜態(tài)文件都集中到這個路徑下

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

執(zhí)行命令

python3 ./manage.py collectstatic

這樣所有Django前后臺的靜態(tài)文件都會集中到項目文件夾pro下static中,另外nginx-pro其中一個配置location /static即可讓Nginx來處理靜態(tài)內(nèi)容。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享標題:跨過Nginx上基于uWSGI部署Django項目的坑-創(chuàng)新互聯(lián)
鏈接分享:http://chinadenli.net/article34/hpise.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機搜索引擎優(yōu)化網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計網(wǎng)站導航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司