nginx+uwsgi阿裏雲ubuntu服務器上簡單部署flask RESTful風格項目
ubuntu16.04上利用Nginx代理uwsgi處理Flask web應用
1、環境要求
ubuntu16.04 ---- 阿裏雲的服務器
Nginx
python2
uwsgi
2、簡單介紹Nginx
nginx是一個高性能的http和反向代理的服務器,Nginx采采用的epoll的機制,而沒有使用select和poll,雖然,在用戶活躍數量比較高的時候,epoll性能不如select,但是,我們用Nginx來作為web服務器還是很不錯的。nginx是一個輕量級的web服務器,他占用內存少,並發能力強,非常適合作為靜態資源的服務器使用。
apt-get安裝nginx:
sudo apt-get update sudo apt-get install software-properties-common sudo add-apt-repository ppa:nginx/stable sudo apt-get update sudo apt-get install nginx
安裝完成後,打開瀏覽器訪問你的服務器,如果看到了nginx的歡迎頁,說明你安裝成功了,如果沒有看到歡迎頁,也不用著急,先檢查自己的阿裏雲服務器的安全組規則中是否允許了80端口,如果沒有,直接添加安全組規則。
添加安全組規則方法鏈接:https://jingyan.baidu.com/article/fea4511a2e387cf7bb912532.html
3、簡單介紹uWsgi
uwsgi是一個web服務器,它實現了wsgi、uwsgi、http等協議。
uwsgi可以理解為Nginx和flask項目之間的橋梁,當nginx發現用戶請求的不是static文件時,他就請求uwsgi,uwsgi又將請求拋給了flask,flask找到相應的api然後返回。
安裝uwsgi:pip install uwsgi
讓我們從一個簡單的”Hello World”開始:
def application(env, start_response): start_response(‘200 OK‘, [(‘Content-Type‘,‘text/html‘)]) return [b"Hello World"]
(將其保存為 foobar.py
)。
正如你所見,它由一個簡單的Python函數組成。之所以稱之為 “application”,是因為它是uWSGI Python加載器將會搜索的默認函數 (但你顯然可以自定義)。
將其部署在http端口9090,如果是阿裏雲服務器需要註意,添加9090端口到安全組
現在,啟動uWSGI來運行一個HTTP服務器/路由器,它會傳遞請求到你的WSGI應用:
uwsgi --http :9090 --wsgi-file foobar.py
4、線上調式flask項目
確保項目所需文件都安裝完成,使用flask自帶的web應用服務器Werkzeug運行項目
如果項目運行失敗,請自行檢查問題所在
註意:添加端口到安全組
5、配置uwsgi
確定nginx,uwsgi都安裝正常,同時flask也能正常運行。
[uwsgi] socket = 127.0.0.1:8080 #配置nginx chdir = /home/python/app #配置項目目錄 module = manage #加載指定的python WSGI模塊(模塊路徑必須在PYTHONPATH裏) wsgi-file = manage.py #配置入口模塊 master = True #開啟master callable = app #設置在收到請求時,uWSGI加載的模塊中哪個變量將被調用,默認是名字為“application”的變量 processes = 1 #配置進程數 threads = 1 #配置線程數 vacuum = true #推出是清空變量環境 daemonize = wsgi.log #配置守護進程 pidfile=uwsgi.pid #進程pid
6、配置nginx
如果按照我的方法,用apt安裝的話,配置文件應該在/etc/nginx/sites-enabled/目錄下有個defalut文件,我們就直接修改這個文件,當然 ,在修改前最好先備份一下。
a、首先將下面的代碼註釋掉
#location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. #try_files $uri $uri/ =404; #}
b、添加一下代碼(註意:一定要確保自己的項目目錄下存在logs/access.log和logs/error.log兩個文件夾,不然nginx將會報錯)
location /api 將符合/api的請求轉給uwsgi處理
location / 指定靜態文件處理時的目錄 (註意:用alias的話,路徑的末尾一定要加/,不然會找不到報forbidden錯誤)
access_log /home/python/app/logs/access.log; error_log /home/python/app/logs/error.log; location /api { include uwsgi_params; uwsgi_pass 127.0.0.1:8080; } location /{ alias /home/python/app/www/static/html/; }
nginx+uwsgi阿裏雲ubuntu服務器上簡單部署flask RESTful風格項目