最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nginx搭建基于python的web環(huán)境的實現(xiàn)步驟

 更新時間:2020年01月03日 09:40:58   作者:白樺林_HK  
這篇文章主要介紹了nginx搭建基于python的web環(huán)境的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言:

在搭建開始前,我們先來梳理下web服務工作流程,先看下圖:

1、用戶(PC)向web服務器發(fā)起http請求

2、web服務器判斷用戶請求文件是否為靜態(tài)文件,是則直接讀取靜態(tài)文件并返回給用戶,不是則通過WSGI協(xié)議將請求丟給web框架(django)代碼處理

3、看web框架是否啟動django中間件,如果啟用,則依據(jù)中間件對請求進行修改,如果不啟用,則進入下一步

4、web框架中的路由程序將根據(jù)請求中的url文件名將請求路由至相應py文件

5、相應py文件收到請求后根據(jù)用戶提交的參數(shù)進行計算(期間可能會調用數(shù)據(jù)庫),然后返回計算后的結果和自定義頭部信息以及狀態(tài)碼返回

6、web框架將返回的數(shù)據(jù)打上通用標識符(頭部信息)后返回給web服務器

7、web服務器打上web服務器的通用標識符(頭部信息)后返回給用戶

8、用戶收到返回的數(shù)據(jù)

通過上面可以看到django框架基于WSGI協(xié)議和web服務器進行交互,那么WSGI協(xié)議又是什么呢? 咱們用代碼來說明(偽代碼。寫一個簡易的遵循WSGI協(xié)議的web服務器軟件和django程序):

WSGI服務器的程序:

class WSGI_WEB(object):
 def __init__(self):
 # 1. 創(chuàng)建套接字
 self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 # 2. 綁定
 self.tcp_server_socket.bind(("", 7890))
 # 3. 變?yōu)楸O(jiān)聽套接字
 self.tcp_server_socket.listen(128)

 def set_response_header(self, status, headers):
 self.status = status
 self.headers = [("server", "WSGI_simple_web v1.0")]
 self.headers += headers

 def run(self):
 new_socket, client_addr = self.tcp_server_socket.accept()
 env = new_socket.recv(1024)
 body = application(env, set_response_header) # env是web服務器接收到瀏覽器發(fā)送來的數(shù)據(jù)包;set_response_header為web服務器的一個方法地址,目的是讓django幫web服務器生成http頭部(不是以return的形式給web服務器);此外還有這里調用django里的應用還有一個最核心的任務,就是獲取返回數(shù)據(jù)的body!
 header = self.status + self.headers
 response = header + body  
 new_socket.send(response.encode("utf-8"))

django的app程序:

def application(env, start_response):
 start_response('200 OK', [('Content-Type','text/html')])
 return [b"Hello World"] 

問題:

在生產環(huán)境中使用django提供的簡易web服務器性能太差,一般只用于調試。強大的nginx又不支持WSGI,那么怎么辦呢?

方案:

在nginx和python應用之間加一層支持WSGI協(xié)議的web服務器。以后靜態(tài)文件由nginx進行處理,動態(tài)文件丟給WSGI服務器,然后WSGI服務器再丟給web框架處理。最理想的支持WSGI協(xié)議的web服務器就是uWSGI。

下面來詳細介紹下搭建uWSGI服務器以及與nginx聯(lián)動的方法:

1、安裝uWSGI(支持WSGI的WEB服務器):

centos下python3.6安裝uWSGI方法:

yum install -y gcc* pcre-devel openssl-devel python36-devel.x86_64

pip3.6 install uwsgi

2、開啟uWSGI服務

方式一:

uwsgi --http 192.168.31.123:80 --file teacher/wsgi.py --static-map=/static=static

--http 監(jiān)聽IP端口

--file 項目wsgi.py文件路徑

--static-map 靜態(tài)文件路徑

注意: 執(zhí)行這條命令的時候:一定要在這個項目目錄中~ 

方式二(使用配置文件):

vi uwsgi.ini:

[uwsgi]

# 監(jiān)聽端口(nginx采用反向代理模式時必填)

http = 0.0.0.0:8888


# 項目目錄

chdir=/opt/test/test1/


# 啟動uwsgi的用戶名和用戶組

uid=root

gid=root


# 指定項目的application(我猜是這里的“test1.wsgi”拼接上面的項目目錄后,就將項目中的wsgi.py文件和uWSGI服務器關聯(lián)起來了)

module=test1.wsgi:application

 
# 指定sock的文件路徑(nginx采用本地模式時必填)

socket=/opt/test/script/uwsgi.sock

 
# 啟用主進程

master=true


# 進程個數(shù)

workers=5

pidfile=/opt/test/script/uwsgi.pid


# 自動移除unix Socket和pid文件當服務停止的時候

vacuum=true


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

thunder-lock=true


# 啟用線程

enable-threads=true

 
# 設置自中斷時間

harakiri=30

 
# 設置緩沖

post-buffering=4096

 
# 設置日志目錄

daemonize=/opt/test/script/uwsgi.log

 
# 設置隔多久加載一次項目代碼

py-autoreload=1


執(zhí)行配置文件(注意:這里用什么賬戶執(zhí)行的,以后滲透進來獲取到的就是什么賬戶。所以這一步切忌不要用root執(zhí)行。):

  uwsgi --ini uwsgi.ini

彩蛋:

重啟uWSGI進程: uwsgi --reload uwsgi.pid  # 代碼做變更后uWSGI進程不會立即加載,此時可以重啟一下uWSGI進程讓它生效。。。是不是感覺有點坑,沒事,可以在配置文件中設置py-autoreload

關閉uWSGI進程: uwsgi --stop uwsgi.pid
 

 

3、配置nginx

方式一(反向代理模式):

upstream uwsgi{

 server 10.10.10.29:8888;

}

 

server {

 listen 80;

 server_name localhost;

 

 #charset koi8-r;

 #access_log /var/log/nginx/host.access.log main;

 

 location / {

 proxy_pass http://uwsgi; # 通過反向代理和uWSGI服務器關聯(lián)

 }

}

方式二(本地模式):

server {

 listen 8080;

 server_name localhost;

 

 #charset koi8-r;

 #access_log /var/log/nginx/host.access.log main;

 

 location / {

 include uwsgi_params; # 指定nginx和uWSGI服務器的通信方式

 uwsgi_connect_timeout 30;

 uwsgi_pass unix:/opt/test/script/uwsgi.sock; # 通過sock文件和uWSGI服務器關聯(lián)! 因為nginx會去讀取.sock文件,所以需要關閉selinux才行!?。?

 }

}

4、此時訪問django的admin管理后臺時,靜態(tài)資源會調取失敗。這時可以將該項目所有靜態(tài)資源統(tǒng)一收集到一個文件夾下,然后由nginx統(tǒng)一去調取,真正做到動靜分離(動的給uWSGI,靜的由nginx直接調取):

在settings.py中加入:

TATIC_ROOT = os.path.join(BASE_DIR, 'static_file')

執(zhí)行如下命令(搜集項目中所有靜態(tài)文件至'static_file'目錄):

python3.6 manage.py collectstatic --noinput

此時會在項目目錄下生成一個'static_file'文件夾,內含admin和所有app涉及的靜態(tài)文件 。

在nginx中配置靜態(tài)文件路徑(如果nginx和uWSGI不屬同一臺服務器可以使用反向代理的方式來調取靜態(tài)文件):

location /static/ {

 alias /opt/test/test1/static_file/;

}

此時就可以訪問基于python后臺的web網站了

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 幾種實用的pythonic語法實例代碼

    幾種實用的pythonic語法實例代碼

    在我理解,Pythonic 就是很 Python 的 Python 代碼。下面這篇文章主要給大家分享介紹了幾種實用的pythonic語法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-02-02
  • Python編碼規(guī)范擺脫Python編碼噩夢

    Python編碼規(guī)范擺脫Python編碼噩夢

    Python 中編碼問題,一直是很多 Python 開發(fā)者的噩夢,盡管你是工作多年的 Python 開發(fā)者,也肯定會經常遇到令人神煩的編碼問題,收藏這篇文章以后你可以不用再Google
    2021-10-10
  • python中的os.path.join使用方法詳解

    python中的os.path.join使用方法詳解

    這篇文章主要介紹了python中的os.path.join使用方法詳解,os.path.join用于將多個路徑拼接為一個完整路徑,經常使用,但沒了解過細節(jié),直到今天遇到一個令人疑惑的問題,最后發(fā)現(xiàn)是os.path.join的問題,借此機會,記錄下os.path.join的用法,需要的朋友可以參考下
    2023-11-11
  • python動畫manim中的顏色ManimColor的使用方法詳解

    python動畫manim中的顏色ManimColor的使用方法詳解

    這篇文章主要介紹了python動畫manim中的顏色ManimColor的使用方法,本文通過實例圖文展示給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • python 發(fā)送郵件的四種方法匯總

    python 發(fā)送郵件的四種方法匯總

    這篇文章主要介紹了python 發(fā)送郵件的四種方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • python tkinter模塊的簡單使用

    python tkinter模塊的簡單使用

    這篇文章主要介紹了python tkinter模塊的簡單使用,幫助大家更好的理解和學習使用python制作gui界面,感興趣的朋友可以了解下
    2021-04-04
  • Python寫了個疫情信息快速查看工具實例代碼

    Python寫了個疫情信息快速查看工具實例代碼

    本次使用PyQt5開發(fā)了一款疫情信息快速查看工具,實現(xiàn)了多個數(shù)據(jù)源的查看,代碼量不大,功能相當于瀏覽器,只是限定了一些特定網址,這篇文章主要介紹了Python寫了個疫情信息快速查看工具,需要的朋友可以參考下
    2022-11-11
  • Pytorch微調BERT實現(xiàn)命名實體識別

    Pytorch微調BERT實現(xiàn)命名實體識別

    命名實體識別(NER)是自然語言處理(NLP)中的一項關鍵任務,它涉及識別和分類文本中的關鍵實體,BERT是一種強大的語言表示模型,在各種 NLP 任務中顯著提高了性能,包括 NER,在本文中,我們將展示如何使用 PyTorch 對預訓練的 BERT 模型進行微調,以用于 NER 任務
    2025-03-03
  • Python使用pymysql從MySQL數(shù)據(jù)庫中讀出數(shù)據(jù)的方法

    Python使用pymysql從MySQL數(shù)據(jù)庫中讀出數(shù)據(jù)的方法

    今天小編就為大家分享一篇Python使用pymysql從MySQL數(shù)據(jù)庫中讀出數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • python dir函數(shù)快速掌握用法技巧

    python dir函數(shù)快速掌握用法技巧

    在本篇文章里小編給大家整理的是一篇關于python dir函數(shù)快速掌握用法技巧,有興趣的朋友們可以學習參考下。
    2020-12-12

最新評論

三门峡市| 凭祥市| 花垣县| 临海市| 波密县| 蛟河市| 平南县| 昌黎县| 密云县| 嘉兴市| 金门县| 东台市| 祁门县| 桑植县| 双峰县| 龙川县| 天门市| 那坡县| 大同县| 正镶白旗| 西峡县| 邵阳市| 江安县| 左贡县| 安西县| 阿勒泰市| 永春县| 阿鲁科尔沁旗| 岗巴县| 札达县| 大洼县| 台东县| 邻水| 大安市| 汾西县| 商洛市| 平昌县| 社会| 资中县| 石城县| 远安县|