Linux系统上Nginx+Python的web.py与Django框架环境


Posted in Python onDecember 25, 2015

1.编译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

2.配置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;
}

这里的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>

3.安装fastcgi依赖
需要到 http://trac.saddi.com/flup下载安装,之后fastcgi才能够正常启动。

4.启动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`

成功显示了django的后台界面:
PPPPPPPPPPPPPPPPPPPPP1

5.部署web.py版
安装依赖
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
Python 相关文章推荐
python中xrange用法分析
Apr 15 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
Jul 22 Python
NetworkX之Prim算法(实例讲解)
Dec 22 Python
python opencv实现旋转矩形框裁减功能
Jul 25 Python
python爬取微信公众号文章的方法
Feb 26 Python
python使用Qt界面以及逻辑实现方法
Jul 10 Python
Python hashlib模块加密过程解析
Nov 05 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
May 13 Python
基于Python下载网络图片方法汇总代码实例
Jun 24 Python
运行Python编写的程序方法实例
Oct 21 Python
python“静态”变量、实例变量与本地变量的声明示例
Nov 13 Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 Python
Linux下将Python的Django项目部署到Apache服务器
Dec 24 #Python
在Linux系统上部署Apache+Python+Django+MySQL环境
Dec 24 #Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
Dec 24 #Python
在Mac OS上搭建Python的开发环境
Dec 24 #Python
详解Python字符串对象的实现
Dec 24 #Python
浅谈Python单向链表的实现
Dec 24 #Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 #Python
You might like
php5.2时间相差8小时
2007/01/15 PHP
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
PHP内存使用情况如何获取
2015/10/10 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
javaScript call 函数的用法说明
2010/04/09 Javascript
JavaScript继承方式实例
2010/10/29 Javascript
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
ajax java 实现自动完成功能
2012/12/19 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
使用JavaScript开发IE浏览器本地插件实例
2015/02/18 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
2015/03/28 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
2019/06/10 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
详解Python中break语句的用法
2015/05/14 Python
Python中http请求方法库汇总
2016/01/06 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
Python是什么 Python的用处
2020/05/26 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
公司市场部岗位职责
2013/12/02 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
银行招聘自荐信
2015/03/06 职场文书
2015初中教导处工作总结
2015/07/21 职场文书