<nobr id="fnfu0"></nobr>
<nobr id="fnfu0"></nobr>
<dfn id="fnfu0"><xmp id="fnfu0">
<b id="fnfu0"><noframes id="fnfu0"><tr id="fnfu0"></tr>
<nobr id="fnfu0"><bdo id="fnfu0"></bdo></nobr><b id="fnfu0"><strong id="fnfu0"><tr id="fnfu0"></tr></strong></b>

<div id="fnfu0"><form id="fnfu0"><dfn id="fnfu0"></dfn></form></div>

技術員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當前位置:主頁 > 教程 > 服務器類 >

Linux系統(tǒng)上Nginx+Python的web.py與Django框架環(huán)境

來源:技術員聯(lián)盟┆發(fā)布時間:2018-01-28 12:12┆點擊:

  在網(wǎng)上買了一本《實戰(zhàn)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后臺管理端樣式存放、網(wǎng)站樣式存放的問題。對照著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依賴

  需要到 下載安裝,之后fastcgi才能夠正常啟動。

  4.啟動django

  創(chuàng)建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=http://www.3lian.com/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()

 

  并執(zhí)行:

  ?

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