linux+nginx+python+fastcgi 安裝配置及 django+web.py 部署

來源:互聯網
上載者:User

linux下nginx+python+fastcgi部署總結(django版)

注意:雖然本文成功的搭建了django運行fastcgi的執行個體,但是在實際運行中發現了很多問題,比如程式執行異常,進程在每次請求之後退出之類的。可能是我機器的問題,也可能是程式本身bug,大家如果用來搭建外網環境,請務必多多測試。

一.編譯nginx

在網上買了一本《實戰nginx-取代Apache的高效能伺服器》,寫的比較淺,主要是些配置方面的東西,不過卻正是目前我所需要的。由於需要支援https和rewrite,所以除了nginx的源碼之外,又下載了 openssl-0.9.8r.tar.gz 和 pcre-8.12.tar.gz,把他們和nginx-1.0.4.tar.gz放到同一個目錄。
為了方便編譯,筆者寫了一個指令碼,代碼如下:

#!/bin/bash
 
#=============================================================================
#指令碼所在絕對目錄
abs_path(){
    local path=$1
    local basename=$( basename $path )
    local dirname=$(  dirname  $path )
    cd $dirname
    if [ -h $basename ]; then
        path=$( readlink $basename )
        abs_path $path
    else
        pwd
    fi
}
 
#=============================================================================
#依賴的目錄
src_base_dir=$( abs_path $0 )
src_openssl_dir=$src_base_dir'/openssl-0.9.8r'
src_pcre_dir=$src_base_dir'/pcre-8.12'
src_nginx_dir=$src_base_dir'/nginx-1.0.4'
 
#=============================================================================
#目標的目錄
dest_base_dir=$src_base_dir'/release'
dest_nginx_dir=$dest_base_dir'/nginx'
 
#=============================================================================
#把所有的tar.gz解壓
find . -name "*.tar.gz" | xargs -IX tar zxvf X
 
#=============================================================================
#編譯nginx
cd $src_nginx_dir
chmod u+x ./configure
./configure --with-http_stub_status_module --with-http_ssl_module --with-openssl=$src_openssl_dir --with-pcre=$src_pcre_dir --prefix=$dest_nginx_dir
make && make install

編譯完成後,我們就需要來配置nginx了

二.配置nginx

在server配置項下增加

location / {
    #fastcgi_pass 127.0.0.1:9001;
    fastcgi_pass   unix:django.sock;
 
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param QUERY_STRING $query_string;
    fastcgi_param CONTENT_TYPE $content_type;
    fastcgi_param CONTENT_LENGTH $content_length;
    fastcgi_pass_header Authorization;
    fastcgi_intercept_errors off;
    fastcgi_param SERVER_PROTOCOL $server_protocol;
    fastcgi_param SERVER_PORT $server_port;
    fastcgi_param SERVER_NAME $server_name;
}
 
location /admin_media/ {
    alias /usr/local/lib/python2.7/site-packages/django/contrib/admin/media/;
    break;
}
 
location /site_media/ {
    alias /home/dantezhu/htdocs/ngx_django/media/;
    break;
}

這裡的3個location配置分別解決了,與python進程通訊、django後台管理端樣式存放、網站樣式存放的問題。對照著apache的配置來看,就很容易明白了

WSGIPythonEggs /tmp
<VirtualHost *>
    ServerName fuload.qq.com
    WSGIScriptAlias / /home/dantezhu/htdocs/fuload/conf/setting.wsgi
    <Directory />
        Options FollowSymLinks
        AllowOverride
        Order allow,deny
        Allow from all
    </Directory>
    <Directory "/home/dantezhu/htdocs/fuload/mysite">
        Order Deny,Allow
        Deny from all
    </Directory>
    Alias /admin_media "/usr/local/lib/python2.7/site-packages/django/contrib/admin/media"
    <Directory "/usr/local/lib/python2.7/site-packages/django/contrib/admin/media">
        Order allow,deny
        Options Indexes
        Allow from all
        IndexOptions FancyIndexing
    </Directory>
 
    #AliasMatch /site_media/(.*.(css|gif|png|jpg|jpeg)) /home/dantezhu/htdocs/fuload/media/$1
    Alias /site_media /home/dantezhu/htdocs/fuload/media/
    <Directory "/home/dantezhu/htdocs/fuload/media/">
        Order allow,deny
        Options Indexes
        Allow from all
        IndexOptions FancyIndexing
    </Directory>
</VirtualHost>

三.安裝fastcgi依賴

需要到 http://trac.saddi.com/flup下載安裝,之後fastcgi才能夠正常啟動。

四.啟動django

建立django project的過程我們就不說了,只列出啟動/停止的命令:

啟動:

#python manage.py runfcgi daemonize=true pidfile=`pwd`/django.pid host=127.0.0.1 port=9001 maxrequests=1 &
python manage.py runfcgi daemonize=true pidfile=`pwd`/django.pid socket=/home/dantezhu/nginx/sbin/django.sock maxrequests=1 &

停止:

kill -9 `cat django.pid`

五.啟動nginx

啟動:

./nginx -p /home/dantezhu/nginx/

停止:

kill -QUIT `cat ../logs/nginx.pid`

重新載入配置:

./nginx -t -c `pwd`/../conf/nginx.conf kill -HUP `cat ../logs/nginx.pid`

./nginx -t -c `pwd`/../conf/nginx.conf
kill -HUP `cat ../logs/nginx.pid`

成功顯示了django的後台介面:




linux下nginx+python+fastcgi部署總結(web.py版)

其實web.py上的官方網站已經說的比較清楚了,原文如下: http://webpy.org/cookbook/fastcgi-nginx

這裡主要講一下一些原文沒有照顧到的地方。

一.安裝依賴

spawn-cgi
flup

二.配置nginx

在server配置項下增加

location / {
    #這兩種方法都可以,只不過spawn-cgi啟動的方法不同
    #fastcgi_pass 127.0.0.1:9002;
    fastcgi_pass unix:webpy.sock;
 
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param QUERY_STRING $query_string;
    fastcgi_param CONTENT_TYPE $content_type;
    fastcgi_param CONTENT_LENGTH $content_length;
    fastcgi_param GATEWAY_INTERFACE CGI/1.1;
    fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
    fastcgi_param REMOTE_ADDR $remote_addr;
    fastcgi_param REMOTE_PORT $remote_port;
    fastcgi_param SERVER_ADDR $server_addr;
    fastcgi_param SERVER_PORT $server_port;
    fastcgi_param SERVER_NAME $server_name;
    fastcgi_param SERVER_PROTOCOL $server_protocol;
    fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
}

三.一個簡單的index.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import web
 
urls = ("/.*", "hello")
app = web.application(urls, globals())
 
class hello:
    def GET(self):
        return 'Hello, world!'
 
if __name__ == "__main__":
    web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)
    app.run()

並執行:

chmod +x index.py

四.啟動web.py

啟動:

#spawn-fcgi -P `pwd`/webpy.pid -f /home/dantezhu/htdocs/ngx_web/index.py -a 127.0.0.1 -p 9002 &
spawn-fcgi -P `pwd`/webpy.pid -f /home/dantezhu/htdocs/ngx_web/index.py -s /home/dantezhu/nginx/sbin/webpy.sock &

停止:

kill -9 `cat webpy.pid`

五.啟動nginx


與上一篇文章一樣,這裡不再贅述。

六.加入到rc.local中,自動啟動

/home/dantezhu/nginx/sbin/start.sh
sudo -u dantezhu /home/dantezhu/htdocs/ngx_django/mysite/start.sh
sudo -u dantezhu /home/dantezhu/htdocs/ngx_web/start.sh

OK,就是這樣啦~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.