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

(0)

相关推荐

  • Linux系统上安装MRTG来监控网络流量

    Multi Router Traffic Grapher------MRTG是一个监控网络链路流量负载的工具软件,通过snmp协议得到设备的流量信息,并将流量负载以包含PNG格式的图形的HTML 文档 ...

  • 如何进行检查Linux系统上的网络连接

    在Linux系统上有许多可用于查看的网络设置和连接命令,使用快捷的命令来进行配置系统上的网络连接,方便使用者来查看网络配置和连接. 操作方法 01 首先使用ifquery命令,窗口显示一个网络接口列表 ...

  • 在Linux系统上部署Apache+Python+Django+MySQL环境

    Linux+apache+mysql+python+mod_python+Django 说明:系统rhel 5.3,默认安装httpd.mysql,没有安装的,请下载安装RPM包,删除/etc/htt ...

  • 在Linux系统上安装Wine的教程

    Wine,一个在Linux平台上非常受欢迎并且强大的开源应用,有了它,我们可以在Linux平台上完美运行Windows应用与游戏. WineHQ团队,近期宣布了一个新的开发版本Wine1.7.29.这 ...

  • 在Linux系统上配置SNMP的方法

    在Debian或Ubuntu上配置SNMP 要在基于Debian的系统上安装SNMP代理(snmpd),请运行以下命令: 代码如下: root@server:~# apt-get install sn ...

  • 在Linux系统上使用交换文件扩展swap空间的方法

    想像一种情景,当我们的Linux系统用尽交换空间时,在这种情况下,我们想要使用swap分区扩展交换空间,但在某些情况下磁盘上已经没有可用的空闲分区了,致使我们不能把它扩大. 因此,在这种情况下,我们可 ...

  • 在Linux系统上进行openmp多线程编程的方法

    OpenMP是一种多处理器多线程的编程语言,能够支持多个平台,包括Linux系统,那么Linux下要如何进行openmp多线程编程呢?一起来了解下吧。 关键语法: 代码如下: #inlcude 《om ...

  • 在Linux系统上实现IP转发的方法

    大家好,今天我们学习一下在 Linux 上用 iptables 实现从一个网络接口到另一个接口的IP转发(数据包转发).IP转发的概念是,使 Linux 机器像路由器一样将数据从一个网络发送到另一个网 ...

  • 在Linux系统上开启Initrd文件系统的方法

    initial RAM disk Linux初始RAM磁盘(initrd)是在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程.initrd文件中包含了各种可执行程序和驱动程序,它们可 ...