在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
最近在學(xué)習(xí)Flask,本文介紹一下如何部署Flask開發(fā)的應(yīng)用,同時(shí)也學(xué)習(xí)一下Nginx的使用,這只是在Mac上的一個(gè)實(shí)驗(yàn)。
應(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
因?yàn)槭褂昧?0端口,啟動Nginx時(shí)需要加上sudo。
啟動完成后,訪問localhost:
訪問時(shí)出現(xiàn)了錯(cuò)誤,這是因?yàn)槲覀兊膽?yīng)用還沒有啟動。
FastCGI Server
Nginx是一個(gè)靜態(tài)WEB服務(wù)器,不能直接運(yùn)行我們的Python應(yīng)用,當(dāng)Nginx接受到請求時(shí),會通過FastCGI轉(zhuǎn)發(fā)給我們的應(yīng)用,應(yīng)用是運(yùn)行在FastCGI Server上的,這個(gè)server接收Nginx的請求并調(diào)用我們的程序,將結(jié)果返回給Nginx,Nginx再將結(jié)果返回給用戶。
我們要使用的FastCGI Server是flup,安裝方法:
$ pip install flup
在應(yīng)用目錄下創(chuàng)建一個(gè)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()
同時(shí)給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配置:
啟動的時(shí)候Nginx報(bào)錯(cuò):
nginx: [emerg] getgrnam("wzy") failed in /usr/local/etc/nginx/nginx.conf:2
Google一下后發(fā)現(xiàn)要加上用戶組才行,改成這樣:
再次啟動Nginx后一切正常了。
Nginx配置項(xiàng)user的使用方法:
Syntax: user user [group]; Default: user nobody nobody;
如果忽略group,Nginx會使用和user名稱一樣的用戶組,例如我設(shè)置user wzy,那么Nginx啟動的時(shí)候會去查找用戶組wzy,我的電腦上沒有這個(gè)用戶組,所以Nginx會報(bào)錯(cuò)。
- Nginx中FastCGI如何配置優(yōu)化
- PHP(FastCGI)在Nginx的alias下出現(xiàn)404錯(cuò)誤的解決方法
- PHP+FastCGI+Nginx配置PHP運(yùn)行環(huán)境
- Perl使用nginx FastCGI環(huán)境做WEB開發(fā)實(shí)例
- nginx FastCGI錯(cuò)誤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緩存的實(shí)現(xiàn)示例
相關(guān)文章
人臉識別經(jīng)典算法一 特征臉方法(Eigenface)
這篇文章主要為大家詳細(xì)介紹了人臉識別經(jīng)典算法一,特征臉方法Eigenface,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03基于Python實(shí)現(xiàn)音頻下載應(yīng)用程序
這篇文章主要介紹了如何使用wxPython、yt_dlp和tqdm庫,開發(fā)一個(gè)簡單直觀的用戶界面,并具備高效的音頻下載功能,感興趣的小伙伴可以學(xué)習(xí)一下2023-08-08python 爬蟲出現(xiàn)403禁止訪問錯(cuò)誤詳解
這篇文章主要介紹了 python 爬蟲解決403禁止訪問錯(cuò)誤的相關(guān)資料,需要的朋友可以參考下2017-03-03Python實(shí)戰(zhàn)整活之聊天機(jī)器人
這篇文章主要介紹了Python實(shí)戰(zhàn)整活之聊天機(jī)器人,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04Python matplotlib繪制實(shí)時(shí)數(shù)據(jù)動畫
Matplotlib作為Python的2D繪圖庫,它以各種硬拷貝格式和跨平臺的交互式環(huán)境生成出版質(zhì)量級別的圖形。本文將利用Matplotlib庫繪制實(shí)時(shí)數(shù)據(jù)動畫,感興趣的可以了解一下2022-03-03python操作xlsx文件的包openpyxl實(shí)例
下面小編就為大家分享一篇python操作xlsx文件的包openpyxl實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05