nginx配合python_人生苦短我用python[0x02] nginx与python结合
原標題:人生苦短我用python[0x02] nginx與python結合
**文章內容為原創,歡迎轉載請注明出處**
背景
nginx是一款高性能的http服務器,python是一門無論做系統開發還是業務邏輯開發都是非常不錯的動態語言,現在流行微服務,微服務往往又以http協議居多,LAMP是一直以來比較受歡迎的技術組合,Apache+PHP,PHP確實也是一門用來做web開發不錯的語言,如果涉及到一些系統方面的調用可能用上來就沒有python那么順手,apahce相對于nginx講,在功能方面會比較全面,性能就有所落后,nginx顯得更靈活和高效。今天我們要講的是用nginx作為http服務的框架,用python來開發后端的邏輯實現,這樣的組合很適合把一些系統接口包裝成http接口對外提供服務。
nginx與python結合的姿勢
通常http服務與后端對接往往用的是CGI(Common Gateway Interface)的方式對接,比如apache服務器可以對接一個用c語言編寫的可執行文件,只要這個c語言編寫的執行文件符合CGI的規范就可以處理并返回來自apache服務器的http請求。nginx與python對接,目前使用最為廣泛的方式是WSGI(Web Server Gateway Interface),跟CGI類似,WSGI只是一個標準,他不是一種實現方式,目前開源項目uWSGI是大家用得比較多的實現,本文將會用uWSGI給大家講解nginx與python的結合,并給出一些簡單的例子說明python如何處理來自前端nginx的http請求,如何把處理結果返回給http調用者。
下載安裝nginx
http://nginx.org/en/download.html
#到nginx官網下載最新版本的源碼包到/opt目錄
#解壓后進入代碼目錄進行編譯和安裝
#如果configure過程提示沒有pcre,則需要先安裝pcre-devel庫
./configure --prefix=/opt/nginx
make
make install
#一切順利的話,nginx已經安裝好在/opt/nginx目錄下,我們先去安裝uWSGI然后再回頭設置nginx的配置文件
下載安裝uWSGI
https://uwsgi-docs.readthedocs.io/en/latest/Download.html
#到uWSGI官網下載最新版本的源碼包到/opt目錄
#解壓后進入代碼目錄進行編譯
make
#編譯順利完成后,會在當前目錄下看到uwsgi的可執行文件
#比如我們的目錄是 /opt/uwsgi-2.0.8/uwsgi
準備python uWSGI腳本
#我們把所有uWSGI的python腳本都放在/opt/uwsgi目錄下
mkdir /opt/uwsgi
cd /opt/uwsgi
#先建立一個uwsgi的軟連接
ln -s /opt/uwsgi-2.0.8/uwsgi uwsgi
#寫一個啟動uWSGI進程的腳本
cat run_uwsgi.sh
#!/bin/sh
./uwsgi -s 127.0.0.1:3031 -M -p 16 #監聽本機3031端口,16個子進程
--harakiri=120 #處理超時時間是120秒
--pythonpath /opt/uwsgi #python目錄
--chdir /opt/uwsgi
--wsgi-file main.py #uWSGI的入口文件是main.py,下面會有main.py內容
--daemonize /var/log/uwsgi.log #日志輸出文件
--touch-logreopen=/var/log/touch-uwsgi-logreopen #設置可以通知uWSGI重新打開日志文件
uWSGI入口文件 main.py
import web
import os
import json
from urllib import unquote
urls = ("/.*", "main")
class main:
def GET(self):
try:
#獲取GET參數
query = unquote(web.ctx.env['QUERY_STRING'])
#返回內容就是nginx返回給http調用者的內容,這里只返回GET請求內容
return query
except Exception as e:
return e
def POST(self):
try:
#獲取POST數據
post_data = json.loads(web.data())
#同GET一樣,返回POST數據
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服務
location ~ /uwsgi/(.*) {
include uwsgi_params;
uwsgi_send_timeout 120s; #設置超時時間
uwsgi_read_timeout 120s;
uwsgi_pass 127.0.0.1:3031; #跟uWSGI服務端口一致
運行uWSGI和nginx
#啟動uWSGI服務
sh /opt/uwsgi/run_uwsgi.sh
#檢查uwsgi是否啟動成功監聽服務端口
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/"
下期預告
人生苦短我用python[0x06] list分片與推導返回搜狐,查看更多
責任編輯:
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的nginx配合python_人生苦短我用python[0x02] nginx与python结合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑水冷散热更换cpu(水冷散热怎么换)
- 下一篇: emacs python ide_Ema