nginx uWSGI django之間的具體聯絡

2021-10-09 06:07:17 字數 4176 閱讀 4323

看了網上很多的nginx、uwsgi、django伺服器框架搭建配置過程,但是絕大多數都只是說說搭建過程,並沒有說過之間具體的聯絡。

uwsgi、wsgi和nginx的區別和關係

參考博文寫的特別棒,淺顯易懂。在這說說我自己的理解就是,通過網頁端實現對瀏覽器的訪問,需要兩部分,web伺服器與web框架

1.django是乙個web框架,關於html檔案的編輯,檔案路由的設定,資料庫的管理主要在django框架下實現的。

2.uwsgi是web伺服器,uwsgi伺服器實現了wsgi協議,並通過該協議與django"通訊"。其實在建立django專案的時候,在『專案名』/『專案名』/下有乙個wsgi.py檔案,本人猜測,該檔案是實現wsgi協議的乙個python檔案,因為在單獨啟動django專案,沒有啟動uwsgi的時候,我們仍然是可以通過瀏覽器訪問到django框架下的html頁面的。為什麼要使用uwsgi伺服器呢?就是因為,django框架自己實現wsgi協議的效能太差了,使用uwsgi伺服器來提高效能。

(個人直觀感覺,效能主要體現在訪問乙個網頁的請求時間與失敗率)

3.nginx是乙個**伺服器,舉個例子就是,比如三十個請求同時訪問乙個**,三十個請求同時響應到了nginx伺服器這裡,nginx伺服器就這三十個請求分配給後台的三颱伺服器,每一台處理十個請求,後台的三颱伺服器就是前邊提到的uwsgi+django架構。(非專業的、淺顯的理解)

從django開始說起,

#建立django專案

django-admin.py startproject helloworld

#進入專案目錄

cd helloworld

#修改 setting.py,允許其他主機訪問

allowed_hosts = [『*』]

#啟動 django 專案

python3 manage.py runserver 0.0.0.0:8000

這樣就可以開啟瀏覽器,輸入127.0.0.1:8000 訪問django起始頁面,0.0.0.0:8000代表本機的8000埠,在瀏覽器中127.0.0.1即是代表了本機。

配置uwsgi伺服器,啟動該伺服器其實很簡單,只要建立並配置好uwsgi.ini檔案,執行啟動命令即可。

#django專案簡要路徑

helloworld

| – manager.py

| – helloworld

| – | – settings.py

| – | – urls.py

| – | – wsgi.py

| – script (建立)

| – | – uwsgi.ini (建立)

| – | – uwsgi.log (建立)

| – | – nginx_access.log (建立)

| – | – nginx_error.log (建立)

[uwsgi]

#專案目錄

chdir=/home/st/django/helloworld/

#指定sock的檔案路徑,這個檔案與django建立聯絡,該檔案在django專案中原本不存在,啟動uwsgi之後,會自動生成

socket=/home/st/django/helloworld/helloworld.sock

#程序個數

workers=5

pidfile=/home/st/django/helloworld/script/uwsgi.pid

#指定ip埠

#指定靜態檔案

static-map=/static=/home/st/django/helloworld/static

#啟動uwsgi的使用者名稱和使用者組

uid=root

gid=root

#啟用主程序

master=true

#自動移除unix socket和pid檔案當服務停止的時候

vacuum=true

#序列化接受的內容,如果可能的話

thunder-lock=true

#啟用執行緒

enable-threads=true

#設定自中斷時間

harakiri=30

#設定緩衝

post-buffering=8192

#設定日誌目錄

daemonize=/home/st/django/helloworld/script/uwsgi.log

#connect to django !!!

wsgi-file=/home/st/django/helloworld/helloworld/wsgi.py

加粗部分說明了配置的要點,一是指定目錄位址,一是指定uwsgi的訪問埠,另乙個是uwsgi與django之間的聯絡。之後啟動 uwsgi伺服器,在—目錄中執行,

uwsgi --ini uwsgi.ini

在這對於uwsgi伺服器的訪問埠設定成了127.0.0.1:8010,即是在瀏覽器中輸入127.0.0.1:8010就可以訪問到,django的起始頁面。

配置nginx**伺服器,該伺服器的啟動也很簡單,配置好nginx.conf啟動檔案,執行命令即可

server 

# 指定靜態檔案路徑

location /static

}

說明:nginx啟動後會一直監聽著8888埠,當有請求發起時,它將轉到helloworld.sock檔案中所設定的位址去,也即是uwsgi中的8010埠,再進入django框架中的html頁面。直接設定 uwsgi_pass 127.0.0.1:8010; 應該也是可行的,不過我自己一直沒有成功,尚不知問題在哪,沒多餘時間去嘗試了。

#通過預設的nginx.conf啟動

sudo nginx

#自定義的.conf檔案啟動

sudo nginx -c ***/***/***.conf

在nginx.ini檔案中,有兩個要點,一是設定針對nginx的乙個訪問埠,另乙個是設定nginx訪問埠**的埠,也就是從哪個埠進入nginx,之後去向哪個埠。在很多的文章教程中都說了很多的在nginx.conf中新增server模組,但是並沒有詳細說明要點。

要點說明1,啟動uwsgi伺服器之後

對於django起始頁面的訪問有兩種方式,127.0.0.1:8000與127.0.0.1:8010,8000埠是通過django進行訪問的,8010埠是通過uwsgi伺服器進行訪問的。想要通過8000埠進行訪問,需要啟動django(python3 manage.py runserver 0.0.0.0:8000);想要通過8010埠進行訪問,需要啟動uwsgi(uwsgi --ini uwsgi.ini),此時不管djangou是否啟動,8010埠都可以正常訪問。

要點說明2,啟動nginx伺服器之後

對於django起始頁面的訪問有三種方式,127.0.0.1:8000、127.0.0.1:8010、127.0.0.1:8888 ,8000是通過django進行訪問的,前提是django服務沒有關閉。8010是通過uwsgi進行訪問的。8888是通過nginx進行訪問的。

對伺服器進行訪問,需要實現wsgi協議。通過8888埠訪問,啟動nginx,之前還需要啟動uwsgi,django不需要啟動,因為wsgi協議由uwsgi實現了。

相關命令

django

#建立django-admin.py startproject helloworld

#啟動python3 manager.py runserver 0.0.0.0:8000

uwsgi

#啟動uwsgi --ini uwsgi.ini

#停止uwsgi --stop uwsgi.pid

nginx

#啟動sudo nginx

#停止sudo nginx -s stop

List具體子類,及之間的區別

list 有序,可重複,有索引。arraylist 底層是陣列資料結構。是執行緒不同步的。查詢元素的速度很快。但是增刪元素的效率稍低。linkedlist 底層是鍊錶資料結構,是執行緒不同步的。查詢元素的速度稍慢,但是增刪速度很快。vector 底層也是陣列資料結構。是執行緒同步的。被arrayli...

mysql限制行數 限制MySQL表之間聯接的行數

我有什麼 我在mysql資料庫 5.6.35版 中有以下兩個表。create table runs name varchar 200 not null,run varchar 200 not null,points int 11 not null default charset latin1 ins...

用kdevelop構建ROS程式包之間聯絡

2.執行命令 sudo gedit kdevelop.desktop 3.把exec kdevelop u 改為 exec bash i c kdevelop 4.開啟kdevelop軟體選擇開啟的工程 zuoye picture catkin ws src 選擇cmakelists.txt 5.可...