萬盛學電腦網

 萬盛學電腦網 >> 服務器教程 >> Linux系統上Nginx+Python的web.py與Django框架環境

Linux系統上Nginx+Python的web.py與Django框架環境

   1.編譯nginx

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

  為了方便編譯,筆者寫了一個腳本,代碼如下:

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #!/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

  2.配置nginx

  在server配置項下增加

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 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; }

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

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 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>

  3.安裝fastcgi依賴

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

  4.啟動django

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

  啟動:

  ?

1 2 #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 &

  停止:

  ?

1 kill -9 `cat django.pid`

  啟動nginx

  啟動:

  ?

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

  停止:

  ?

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

  重新載入配置:

  ?

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

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

  PPPPPPPPPPPPPPPPPPPPP1

  5.部署web.py版

  安裝依賴

  spawn-cgi

  flup

  配置nginx

  在server配置項下增加

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 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

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/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()

  並執行:

  ?

1 chmod +x index.py

  .啟動web.py

  啟動:

  ?

1 2 #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 &

  停止:

  ?

1 kill -9 `cat webpy.pid`

  啟動nginx

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

  ?

1 2 3 /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
copyright © 萬盛學電腦網 all rights reserved