亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言:

在搭建開始前,我們先來(lái)梳理下web服務(wù)工作流程,先看下圖:

1、用戶(PC)向web服務(wù)器發(fā)起http請(qǐng)求

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

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

4、web框架中的路由程序?qū)⒏鶕?jù)請(qǐng)求中的url文件名將請(qǐng)求路由至相應(yīng)py文件

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

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

7、web服務(wù)器打上web服務(wù)器的通用標(biāo)識(shí)符(頭部信息)后返回給用戶

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

通過(guò)上面可以看到django框架基于WSGI協(xié)議和web服務(wù)器進(jìn)行交互,那么WSGI協(xié)議又是什么呢? 咱們用代碼來(lái)說(shuō)明(偽代碼。寫一個(gè)簡(jiǎn)易的遵循WSGI協(xié)議的web服務(wù)器軟件和django程序):

WSGI服務(wù)器的程序:

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服務(wù)器接收到瀏覽器發(fā)送來(lái)的數(shù)據(jù)包;set_response_header為web服務(wù)器的一個(gè)方法地址,目的是讓django幫web服務(wù)器生成http頭部(不是以return的形式給web服務(wù)器);此外還有這里調(diào)用django里的應(yīng)用還有一個(gè)最核心的任務(wù),就是獲取返回?cái)?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"] 

問(wèn)題:

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

方案:

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

下面來(lái)詳細(xì)介紹下搭建uWSGI服務(wù)器以及與nginx聯(lián)動(dòng)的方法:

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

centos下python3.6安裝uWSGI方法:

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

pip3.6 install uwsgi

2、開啟uWSGI服務(wù)

方式一:

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

--http 監(jiān)聽I(yíng)P端口

--file 項(xiàng)目wsgi.py文件路徑

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

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

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

vi uwsgi.ini:

[uwsgi]

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

http = 0.0.0.0:8888


# 項(xiàng)目目錄

chdir=/opt/test/test1/


# 啟動(dòng)uwsgi的用戶名和用戶組

uid=root

gid=root


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

module=test1.wsgi:application

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

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

 
# 啟用主進(jìn)程

master=true


# 進(jìn)程個(gè)數(shù)

workers=5

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


# 自動(dòng)移除unix Socket和pid文件當(dāng)服務(wù)停止的時(shí)候

vacuum=true


# 序列化接受的內(nèi)容,如果可能的話

thunder-lock=true


# 啟用線程

enable-threads=true

 
# 設(shè)置自中斷時(shí)間

harakiri=30

 
# 設(shè)置緩沖

post-buffering=4096

 
# 設(shè)置日志目錄

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

 
# 設(shè)置隔多久加載一次項(xiàng)目代碼

py-autoreload=1


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

  uwsgi --ini uwsgi.ini

彩蛋:

重啟uWSGI進(jìn)程: uwsgi --reload uwsgi.pid  # 代碼做變更后uWSGI進(jìn)程不會(huì)立即加載,此時(shí)可以重啟一下uWSGI進(jìn)程讓它生效。。。是不是感覺有點(diǎn)坑,沒(méi)事,可以在配置文件中設(shè)置py-autoreload

關(guān)閉uWSGI進(jìn)程: 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; # 通過(guò)反向代理和uWSGI服務(wù)器關(guān)聯(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服務(wù)器的通信方式

 uwsgi_connect_timeout 30;

 uwsgi_pass unix:/opt/test/script/uwsgi.sock; # 通過(guò)sock文件和uWSGI服務(wù)器關(guān)聯(lián)! 因?yàn)閚ginx會(huì)去讀取.sock文件,所以需要關(guān)閉selinux才行?。?!

 }

}

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

在settings.py中加入:

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

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

python3.6 manage.py collectstatic --noinput

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

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

location /static/ {

 alias /opt/test/test1/static_file/;

}

此時(shí)就可以訪問(wèn)基于python后臺(tái)的web網(wǎng)站了

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python中pandas.DataFrame的簡(jiǎn)單操作方法(創(chuàng)建、索引、增添與刪除)

    python中pandas.DataFrame的簡(jiǎn)單操作方法(創(chuàng)建、索引、增添與刪除)

    這篇文章主要介紹了python中pandas.DataFrame的簡(jiǎn)單操作方法,其中包括創(chuàng)建、索引、增添與刪除等的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-03-03
  • 使用Django開發(fā)簡(jiǎn)單接口實(shí)現(xiàn)文章增刪改查

    使用Django開發(fā)簡(jiǎn)單接口實(shí)現(xiàn)文章增刪改查

    這篇文章主要介紹了使用Django開發(fā)簡(jiǎn)單接口實(shí)現(xiàn)文章增刪改查,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • OpenCV-Python使用分水嶺算法實(shí)現(xiàn)圖像的分割與提取

    OpenCV-Python使用分水嶺算法實(shí)現(xiàn)圖像的分割與提取

    在圖像的處理過(guò)程中,經(jīng)常需要從圖像中將前景對(duì)象作為目標(biāo)圖像分割或者提取出來(lái)。本文就介紹了使用分水嶺算法實(shí)現(xiàn)圖像的分割與提取,感興趣的可以了解一下
    2021-06-06
  • DJANGO-URL反向解析REVERSE實(shí)例講解

    DJANGO-URL反向解析REVERSE實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于DJANGO-URL反向解析REVERSE的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2019-10-10
  • Python爬蟲技術(shù)

    Python爬蟲技術(shù)

    本文將要介紹的是python爬蟲基礎(chǔ)知識(shí),感興趣的小伙伴一起來(lái)學(xué)習(xí)吧
    2021-08-08
  • python 調(diào)用win32pai 操作cmd的方法

    python 調(diào)用win32pai 操作cmd的方法

    下面小編就為大家?guī)?lái)一篇python 調(diào)用win32pai 操作cmd的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • pytorch + visdom 處理簡(jiǎn)單分類問(wèn)題的示例

    pytorch + visdom 處理簡(jiǎn)單分類問(wèn)題的示例

    這篇文章主要介紹了pytorch + visdom 處理簡(jiǎn)單分類問(wèn)題的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python算法測(cè)試結(jié)果自動(dòng)保存到excel表格的實(shí)現(xiàn)步驟

    python算法測(cè)試結(jié)果自動(dòng)保存到excel表格的實(shí)現(xiàn)步驟

    我們?cè)谶M(jìn)行算法評(píng)估是通常會(huì)針對(duì)每個(gè)樣本的算法處理結(jié)果進(jìn)行統(tǒng)計(jì),例如每個(gè)樣本正確預(yù)測(cè)數(shù)量、漏檢數(shù)量和誤檢數(shù)量、精度等,本文小編將給大家介紹python算法測(cè)試結(jié)果自動(dòng)保存到excel表格的實(shí)現(xiàn)步驟,感興趣的朋友可以參考下
    2023-12-12
  • python中zip()函數(shù)遍歷多個(gè)列表方法

    python中zip()函數(shù)遍歷多個(gè)列表方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python中zip()函數(shù)遍歷多個(gè)列表方法,對(duì)此有興趣的朋友們可以學(xué)習(xí)下。
    2021-02-02
  • python從ftp獲取文件并下載到本地

    python從ftp獲取文件并下載到本地

    這篇文章主要介紹了python從ftp獲取文件并下載到本地,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-12-12

最新評(píng)論