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编写的com组件发生R6034错误的原因与解决办法
Apr 01 Python
跟老齐学Python之print详解
Sep 28 Python
python使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
Jan 02 Python
利用python实现微信头像加红色数字功能
Mar 26 Python
python 剪切移动文件的实现代码
Aug 02 Python
pycharm配置当鼠标悬停时快速提示方法参数
Jul 31 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 Python
pyqt5 QlistView列表显示的实现示例
Mar 24 Python
使用sklearn对多分类的每个类别进行指标评价操作
Jun 11 Python
python实现快速文件格式批量转换的方法
Oct 16 Python
python温度转换华氏温度实现代码
Dec 06 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
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
2011/12/08 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
JavaScript prototype 使用介绍
2013/08/29 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
javascript对象的创建和访问
2016/03/08 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
使用vue制作探探滑动堆叠组件的实例代码
2018/03/07 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
JavaScript监听一个DOM元素大小变化
2020/04/26 Javascript
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
Python压缩模块zipfile实现原理及用法解析
2020/08/14 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
吃空饷专项治理工作实施方案
2014/03/04 职场文书
感恩母亲节活动方案
2014/03/04 职场文书
趣味运动会广播稿
2014/09/13 职场文书
保安辞职信范文
2015/02/28 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
Python语言规范之Pylint的详细用法
2021/06/24 Python