程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 在Mac OS上部署Nginx和FastCGI以及Flask框架的教程

在Mac OS上部署Nginx和FastCGI以及Flask框架的教程

編輯:更多關於編程

       這篇文章主要介紹了在Mac OS上部署Nginx和FastCGI以及Flask框架的教程,Flask是Python下一個極簡的web開放框架,需要的朋友可以參考下

      最近在學習Flask,本文介紹一下如何部署Flask開發的應用,同時也學習一下Nginx的使用,這只是在Mac上的一個實驗。

      應用

      這裡使用的應用就是官方的文檔中給出的Flaskr。

      安裝Nginx

      使用HomeBrew安裝Nginx:

      ?

    1 $ brew install nginx

      HomeBrew會自動安裝Nginx及其依賴的程序。在我的電腦上安裝的是Nginx 1.6.2,配置文件的路徑是/usr/local/etc/nginx/nginx.conf。

      啟動Nginx的命令:

      ?

    1 $ nginx

      Nginx的默認端口是8080,用浏覽器打開localhost:8080,顯示如下所示的頁面說明Nginx已經工作了。

    201552143836668.jpg (600×358)

      配置Nginx

      修改Nginx的配置文件:

      ?

    1 2 3 4 5 6 7 8 9 10 11 12 13 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:

      ?

    1 2 $ nginx -s quit $ sudo nginx

      因為使用了80端口,啟動Nginx時需要加上sudo。

      啟動完成後,訪問localhost:

    201552143905542.jpg (600×322)

      訪問時出現了錯誤,這是因為我們的應用還沒有啟動。

      FastCGI Server

      Nginx是一個靜態WEB服務器,不能直接運行我們的Python應用,當Nginx接受到請求時,會通過FastCGI轉發給我們的應用,應用是運行在FastCGI Server上的,這個server接收Nginx的請求並調用我們的程序,將結果返回給Nginx,Nginx再將結果返回給用戶。

      我們要使用的FastCGI Server是flup,安裝方法:

      ?

    1 $ pip install flup

      在應用目錄下創建一個fcgi文件,例如flaskr.fcgi:

      ?

    1 2 3 4 5 6 #!/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文件可執行的權限:

      ?

    1 $ chmod +x flaskr.fcgi

      手動啟動server:

      ?

    1 2 $ screen $ ./flaskr.fcgi

      使用screen使server在後台運行,或者:

      ?

    1 $ nohup ./flaskr.fcgi &

      再次訪問localhost就可以看到我們的應用了。

      遇到的問題

      第一次運行FastCGI server後,任然無法訪問,查看Nginx的日志後發現Nginx服務器沒有權限訪問socket文件,修改nginx.conf添加user配置:

      復制代碼 代碼如下:

      user wzy;

      啟動的時候Nginx報錯:

      ?

    1 nginx: [emerg] getgrnam("wzy") failed in /usr/local/etc/nginx/nginx.conf:2

      Google一下後發現要加上用戶組才行,改成這樣:

      復制代碼 代碼如下:

      user wzy wheel;

      再次啟動Nginx後一切正常了。

      Nginx配置項user的使用方法:

      ?

    1 2 Syntax: user user [group]; Default: user nobody nobody;

      如果忽略group,Nginx會使用和user名稱一樣的用戶組,例如我設置user wzy,那麼Nginx啟動的時候會去查找用戶組wzy,我的電腦上沒有這個用戶組,所以Nginx會報錯。

            注< >:更多精彩教程請關注三聯編程

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved