簡述uwsgi使用乙個服務啟動多個檔案的用法

2022-09-03 13:39:12 字數 2696 閱讀 1784

【場景篇】

為了節省埠的占用,將n個flask應用服務——每個對應乙個檔案(web.py、django也一樣)合併為乙個埠服務來啟用

【尋思篇】

通常的做法:每個檔案配置乙個xml 或者 ini檔案,然後依次啟動uwsgi(uwsgi -x ),形如:

<

uwsgi

>

<

wsgi-file

>/home/yxgly/code/doraemon/dsbag/get_data/get_data_api.py

wsgi-file

>

<

callable

callable

>

<

socket

>/tmp/uwsgi1.sock

socket

>

<

stats

>/tmp/stats.socket1

stats

>

<

master

/>

<

enable-threads

>true

enable-threads

>

<

workers

>1

workers

>

<

threads

>1

threads

>

<

processes

>1

processes

>

uwsgi

>

uwsgi -x  -d /tmp/uwsgi.log

但這樣會導致啟動的uwsgi太多,不便於管理。

稍高階一點的用法,可以使用「皇帝」(emperor),具體用法:將所有的xml統一放到乙個目錄裡(例如:放到這個目錄下 mysgi_conf),進行一併啟動:

uwsgi --emperor mysgi_conf/ --logto /tmp/uwsgi.log

這樣啟動了之後,每個檔案都有有個與之對應的socket檔案

然後在nginx上配置多條location來做好走向,形如:

server 

location /get_info

location /get_class

……………………………………

access_log logs/access_8888.log main;

}

但這種會出現種種錯誤,若是只配置「location /" 就會正常,但我的「需求」是在乙個埠下(8888)做好所有的事情……

找谷哥、度娘……找到了一篇

坑爹的是按照他指導的樣子去做,還是不奏效

與此同時,更讓我困惑的是文中所提到的「uwsgi_modifier1」的用法,我又沒有完全「領會」明白,最後搜到了這樣一段解釋,就算稍微明白了一些。

【解決篇】

在網上搜了很多關於這個問題的解決思路,但是沒有找到乙個「合適」的答案(百變不離其中的都是抄來抄去,沒有任何乙個奏效的)

於是 決定還是閱讀更權威的官方文件

(這一篇介紹與nginx互動的頁面,答案就在此)

重要的事情說三遍!

簡言之,不要用「uwsgi_modifier1「了!

再看上下文,發現了個更有「意思」的用法

[

uwsgi

]socket = 127.0.0.1:3031;;

rewrite script_name and path_info accordingly

manage-script-name = true

大家看到這裡也知道如何搞定了吧……

對,最後的樣子就是這樣子

乙個uwsgi配置示例

摘自 01 02python 03127.0.0.1 9001 04 05 06 07 08 094 108 111 122000 13512 14256 15192 16 17 18 uwsgi配置檔案中的引數也可以在命令列通過uwsgi指定,配置檔案除了xml格式外,還可以寫成ini格式的,軟體...

docker 啟動乙個mysql服務

目錄 一 pull官方映象 二 檢視映象 三 執行容器 開啟mysql服務 四 如何登陸到客戶端 選擇乙個指定的版本,或者直接拉去最新的mysql版本。docker pull mysqldocker images docker images repository tag image id creat...

新增乙個Ubuntu的開機啟動服務。

新增乙個ubuntu的開機啟動服務。如果要新增為開機啟動執行的指令碼檔案,可先將指令碼複製或者軟連線到 etc init.d 目錄下,然後用 update rc.d defaults nn命令 nn為啟動順序 將指令碼新增到初始化執行的佇列中去。注意如果指令碼需要用到網路,則nn需設定乙個比較大的數...