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 fileinput模块使用介绍
Nov 30 Python
Python判断字符串与大小写转换
Jun 08 Python
matplotlib subplots 调整子图间矩的实例
May 25 Python
在python环境下运用kafka对数据进行实时传输的方法
Dec 27 Python
python jenkins 打包构建代码的示例代码
Nov 29 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
Jan 13 Python
pytorch方法测试——激活函数(ReLU)详解
Jan 15 Python
Pytest参数化parametrize使用代码实例
Feb 22 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
Mar 03 Python
Python如何使用logging为Flask增加logid
Mar 30 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 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
生成静态页面的PHP类
2006/07/15 PHP
使用php实现截取指定长度
2013/08/06 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
jQuery对JSON数据进行排序输出的方法
2015/06/24 Javascript
Ajax中解析Json的两种方法对比分析
2015/06/25 Javascript
jQuery设置Easyui校验规则(推荐)
2016/11/21 Javascript
js遍历json的key和value的实例
2017/01/22 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
微信小程序自定义toast的实现代码
2018/11/16 Javascript
Nginx设置为Node.js的前端服务器方法总结
2019/03/27 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
让python同时兼容python2和python3的8个技巧分享
2014/07/11 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
python 多线程重启方法
2019/02/18 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
精油和天然健康美容产品:Art Naturals
2018/01/27 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
销售自我评价
2013/10/22 职场文书
大学生开西餐厅创业计划书
2014/02/01 职场文书
公务员更新知识培训实施方案
2014/03/31 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
体检通知范文
2015/04/21 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书
2016党员党课心得体会
2016/01/07 职场文书
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL