日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

nginx配合python_人生苦短我用python[0x02] nginx与python结合

發(fā)布時間:2023/12/3 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx配合python_人生苦短我用python[0x02] nginx与python结合 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原標(biāo)題:人生苦短我用python[0x02] nginx與python結(jié)合

**文章內(nèi)容為原創(chuàng),歡迎轉(zhuǎn)載請注明出處**

背景

nginx是一款高性能的http服務(wù)器,python是一門無論做系統(tǒng)開發(fā)還是業(yè)務(wù)邏輯開發(fā)都是非常不錯的動態(tài)語言,現(xiàn)在流行微服務(wù),微服務(wù)往往又以http協(xié)議居多,LAMP是一直以來比較受歡迎的技術(shù)組合,Apache+PHP,PHP確實也是一門用來做web開發(fā)不錯的語言,如果涉及到一些系統(tǒng)方面的調(diào)用可能用上來就沒有python那么順手,apahce相對于nginx講,在功能方面會比較全面,性能就有所落后,nginx顯得更靈活和高效。今天我們要講的是用nginx作為http服務(wù)的框架,用python來開發(fā)后端的邏輯實現(xiàn),這樣的組合很適合把一些系統(tǒng)接口包裝成http接口對外提供服務(wù)。

nginx與python結(jié)合的姿勢

通常http服務(wù)與后端對接往往用的是CGI(Common Gateway Interface)的方式對接,比如apache服務(wù)器可以對接一個用c語言編寫的可執(zhí)行文件,只要這個c語言編寫的執(zhí)行文件符合CGI的規(guī)范就可以處理并返回來自apache服務(wù)器的http請求。nginx與python對接,目前使用最為廣泛的方式是WSGI(Web Server Gateway Interface),跟CGI類似,WSGI只是一個標(biāo)準(zhǔn),他不是一種實現(xiàn)方式,目前開源項目uWSGI是大家用得比較多的實現(xiàn),本文將會用uWSGI給大家講解nginx與python的結(jié)合,并給出一些簡單的例子說明python如何處理來自前端nginx的http請求,如何把處理結(jié)果返回給http調(diào)用者。

下載安裝nginx

http://nginx.org/en/download.html

#到nginx官網(wǎng)下載最新版本的源碼包到/opt目錄

#解壓后進(jìn)入代碼目錄進(jìn)行編譯和安裝

#如果configure過程提示沒有pcre,則需要先安裝pcre-devel庫

./configure --prefix=/opt/nginx

make

make install

#一切順利的話,nginx已經(jīng)安裝好在/opt/nginx目錄下,我們先去安裝uWSGI然后再回頭設(shè)置nginx的配置文件

下載安裝uWSGI

https://uwsgi-docs.readthedocs.io/en/latest/Download.html

#到uWSGI官網(wǎng)下載最新版本的源碼包到/opt目錄

#解壓后進(jìn)入代碼目錄進(jìn)行編譯

make

#編譯順利完成后,會在當(dāng)前目錄下看到uwsgi的可執(zhí)行文件

#比如我們的目錄是 /opt/uwsgi-2.0.8/uwsgi

準(zhǔn)備python uWSGI腳本

#我們把所有uWSGI的python腳本都放在/opt/uwsgi目錄下

mkdir /opt/uwsgi

cd /opt/uwsgi

#先建立一個uwsgi的軟連接

ln -s /opt/uwsgi-2.0.8/uwsgi uwsgi

#寫一個啟動uWSGI進(jìn)程的腳本

cat run_uwsgi.sh

#!/bin/sh

./uwsgi -s 127.0.0.1:3031 -M -p 16 #監(jiān)聽本機(jī)3031端口,16個子進(jìn)程

--harakiri=120 #處理超時時間是120秒

--pythonpath /opt/uwsgi #python目錄

--chdir /opt/uwsgi

--wsgi-file main.py #uWSGI的入口文件是main.py,下面會有main.py內(nèi)容

--daemonize /var/log/uwsgi.log #日志輸出文件

--touch-logreopen=/var/log/touch-uwsgi-logreopen #設(shè)置可以通知uWSGI重新打開日志文件

uWSGI入口文件 main.py

import web

import os

import json

from urllib import unquote

urls = ("/.*", "main")

class main:

def GET(self):

try:

#獲取GET參數(shù)

query = unquote(web.ctx.env['QUERY_STRING'])

#返回內(nèi)容就是nginx返回給http調(diào)用者的內(nèi)容,這里只返回GET請求內(nèi)容

return query

except Exception as e:

return e

def POST(self):

try:

#獲取POST數(shù)據(jù)

post_data = json.loads(web.data())

#同GET一樣,返回POST數(shù)據(jù)

return post_data

except Exception as e:

return e

app = web.application(urls, globals())

application = app.wsgifunc()

配置nginx.conf

#在nginx server,比如在80端口server塊里面增加后端uWSGI信息

#增加一個/uwsgi/的子目錄,專門用于處理uWSGI服務(wù)

location ~ /uwsgi/(.*) {

include uwsgi_params;

uwsgi_send_timeout 120s; #設(shè)置超時時間

uwsgi_read_timeout 120s;

uwsgi_pass 127.0.0.1:3031; #跟uWSGI服務(wù)端口一致

運行uWSGI和nginx

#啟動uWSGI服務(wù)

sh /opt/uwsgi/run_uwsgi.sh

#檢查uwsgi是否啟動成功監(jiān)聽服務(wù)端口

netstat -lnp|grep uwsgi

#啟動nginx

/opt/nginx/sbin/nginx

#測試uWSGI GET

curl "http://127.0.0.1/uwsgi/?arg1=123&arg2=abc"

#測試uWSGI POST

curl -d "hello" "http://127.0.0.1/uwsgi/"

下期預(yù)告

人生苦短我用python[0x06] list分片與推導(dǎo)返回搜狐,查看更多

責(zé)任編輯:

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的nginx配合python_人生苦短我用python[0x02] nginx与python结合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。