在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
最近在學(xué)習(xí)Flask,本文介紹一下如何部署Flask開發(fā)的應(yīng)用,同時也學(xué)習(xí)一下Nginx的使用,這只是在Mac上的一個實驗。
應(yīng)用
這里使用的應(yīng)用就是官方的文檔中給出的Flaskr。
安裝Nginx
使用HomeBrew安裝Nginx:
$ brew install nginx
HomeBrew會自動安裝Nginx及其依賴的程序。在我的電腦上安裝的是Nginx 1.6.2,配置文件的路徑是/usr/local/etc/nginx/nginx.conf。
啟動Nginx的命令:
$ nginx
Nginx的默認(rèn)端口是8080,用瀏覽器打開localhost:8080,顯示如下所示的頁面說明Nginx已經(jīng)工作了。

配置Nginx
修改Nginx的配置文件:
server {
listen 80;
server_name localhost;
charset utf-8;
location / { try_files $uri @flaskr; }
location @flaskr {
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param SCRIPT_NAME "";
fastcgi_pass unix:/tmp/flaskr-fcgi.sock;
}
}
重新啟動Nginx:
$ nginx -s quit $ sudo nginx
因為使用了80端口,啟動Nginx時需要加上sudo。
啟動完成后,訪問localhost:

訪問時出現(xiàn)了錯誤,這是因為我們的應(yīng)用還沒有啟動。
FastCGI Server
Nginx是一個靜態(tài)WEB服務(wù)器,不能直接運(yùn)行我們的Python應(yīng)用,當(dāng)Nginx接受到請求時,會通過FastCGI轉(zhuǎn)發(fā)給我們的應(yīng)用,應(yīng)用是運(yùn)行在FastCGI Server上的,這個server接收Nginx的請求并調(diào)用我們的程序,將結(jié)果返回給Nginx,Nginx再將結(jié)果返回給用戶。
我們要使用的FastCGI Server是flup,安裝方法:
$ pip install flup
在應(yīng)用目錄下創(chuàng)建一個fcgi文件,例如flaskr.fcgi:
#!/usr/bin/python from flup.server.fcgi import WSGIServer from flaskr import app if __name__ == '__main__': WSGIServer(app, bindAddress='/tmp/flaskr-fcgi.sock').run()
同時給fcgi文件可執(zhí)行的權(quán)限:
$ chmod +x flaskr.fcgi
手動啟動server:
$ screen $ ./flaskr.fcgi
使用screen使server在后臺運(yùn)行,或者:
$ nohup ./flaskr.fcgi &
再次訪問localhost就可以看到我們的應(yīng)用了。
遇到的問題
第一次運(yùn)行FastCGI server后,任然無法訪問,查看Nginx的日志后發(fā)現(xiàn)Nginx服務(wù)器沒有權(quán)限訪問socket文件,修改nginx.conf添加user配置:
啟動的時候Nginx報錯:
nginx: [emerg] getgrnam("wzy") failed in /usr/local/etc/nginx/nginx.conf:2
Google一下后發(fā)現(xiàn)要加上用戶組才行,改成這樣:
再次啟動Nginx后一切正常了。
Nginx配置項user的使用方法:
Syntax: user user [group]; Default: user nobody nobody;
如果忽略group,Nginx會使用和user名稱一樣的用戶組,例如我設(shè)置user wzy,那么Nginx啟動的時候會去查找用戶組wzy,我的電腦上沒有這個用戶組,所以Nginx會報錯。
- Nginx中FastCGI如何配置優(yōu)化
- PHP(FastCGI)在Nginx的alias下出現(xiàn)404錯誤的解決方法
- PHP+FastCGI+Nginx配置PHP運(yùn)行環(huán)境
- Perl使用nginx FastCGI環(huán)境做WEB開發(fā)實例
- nginx FastCGI錯誤Primary script unknown解決辦法
- Gentoo 下安裝與配置Nginx+ MySQL + PHP (fastcgi) 環(huán)境步驟分享
- CentOS 6.1 環(huán)境中部署nginx、php(包括fastcgi)、虛擬主機(jī)配置
- Nginx(PHP/fastcgi)的PATH_INFO問題
- Nginx+PHP(FastCGI)搭建高并發(fā)WEB服務(wù)器(自動安裝腳本)第二版
- Nginx0.5.33+PHP5.2.5(FastCGI)搭建勝過Apache10倍的Web服務(wù)器
- Nginx FastCGI緩存的實現(xiàn)示例
相關(guān)文章
Django靜態(tài)資源URL STATIC_ROOT的配置方法
這篇文章主要介紹了Django靜態(tài)資源URL STATIC_ROOT的配置方法,本文給出配置方法和兩種使用方法,需要的朋友可以參考下2014-11-11
Python數(shù)據(jù)結(jié)構(gòu)與算法之常見的分配排序法示例【桶排序與基數(shù)排序】
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法之常見的分配排序法,結(jié)合實例形式分析了桶排序與基數(shù)排序的相關(guān)原理及實現(xiàn)技巧,需要的朋友可以參考下2017-12-12
一起解密Python中的*args和**kwargs無限可能的函數(shù)參數(shù)
這篇文章主要來跟大家一起解密Python中的*args和**kwargs無限可能的函數(shù)參數(shù)使用的靈活性,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Python的Django框架實現(xiàn)數(shù)據(jù)庫查詢(不返回QuerySet的方法)
這篇文章主要介紹了Python的Django框架實現(xiàn)數(shù)據(jù)庫查詢(不返回QuerySet的方法)2020-05-05
python報錯unexpected?indent的解決辦法
這篇文章主要給大家介紹了關(guān)于python報錯unexpected?indent的解決辦法,在python中出現(xiàn)"Unexpected indent"可能是代碼的縮進(jìn)出現(xiàn)問題,需要的朋友可以參考下2023-06-06
python神經(jīng)網(wǎng)絡(luò)Keras實現(xiàn)GRU及其參數(shù)量
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)Keras實現(xiàn)GRU及其參數(shù)量,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
YOLOv5改進(jìn)系列之增加小目標(biāo)檢測層
yolov5出來已經(jīng)很長時間了,所以有關(guān)yolov5的一些詳細(xì)介紹在這里就不一一介紹了,下面這篇文章主要給大家介紹了關(guān)于YOLOv5改進(jìn)系列之增加小目標(biāo)檢測層的相關(guān)資料,需要的朋友可以參考下2022-09-09
Python3 tkinter 實現(xiàn)文件讀取及保存功能
tkinter是一個跨平臺的GUI庫,開發(fā)的程序可以在win,linux或者mac下運(yùn)行,tkinter是python自帶的GUI庫,是對圖形庫TK的封裝。本文通過實例代碼給大家介紹Python3 tkinter 實現(xiàn)文件讀取及保存功能,感興趣的朋友跟隨小編一起看看吧2019-09-09

