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放到同一个目录。
为了方便编译,笔者写了一个脚本,代码如下:

#!/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
(0)

相关推荐

  • 全面解读Python Web开发框架Django

    花了两周时间,利用工作间隙时间,开发了一个基于Django的项目任务管理Web应用.项目计划的实时动态,可以方便地被项目成员查看(^_^又重复发明轮子了).从前台到后台,好好折腾了一把,用到:HTML.CSS.JavaScript.Apache.Python.mod_wsgi.Django.好久不用CSS和JavaScript了,感到有点生疏了,查了无数次手册.后台Django开发环境的搭建也花了不少时间和精力.记录下来,免得以后走弯路.同时给大家推荐一下Django框架,如果你想非常快速地编写

  • 使用Python的web.py框架实现类似Django的ORM查询的教程

    Django中的对象查询 Django框架自带了ORM,实现了一些比较强大而且方便的查询功能,这些功能和表无关.比如下面这个例子: class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') >>> Question.objects.all() >>> Question.ob

  • Python开发WebService系列教程之REST,web.py,eurasia,Django

    在Bioinformatics(生物信息学)领域,WebService是很重要的一种数据交换技术,未来必将更加重要.目前EBI所提供的WebService就分别有SOAP和REST两种方式的服务,不管是数据服务还是计算服务(计算任务提交). 1 Python + SOAP/WSDL/UDDI 最普遍的做法(个人观点)是使用 python ZSI2.0   ,ZSI还依赖于 SOAPpy  和 pyXML  等LIB. SOAP协议很多人都很熟悉,有很多现有的应用也都使用Java等语言来开发服务端

  • Python使用django搭建web开发环境

    安装 Python 去 Python 官方网站找到 Python 3 的下载地址,根据你的系统选择 32 位或者 64 位的安装包,下载好后双击安装即可. 检测是否安装完成 C:\WINDOWS\system32>python -V Python 3.5.2 使用虚拟环境 Virtualenv 安装 Virtualenv C:\WINDOWS\system32>pip install virtualenv 安装成功后就可以开始创建虚拟环境,指定一个你喜欢的目录 C:\WINDOWS\syste

  • Python之Web框架Django项目搭建全过程

    Python之Web框架Django项目搭建全过程 IDE说明: Win7系统 Python:3.5 Django:1.10 Pymysql:0.7.10 Mysql:5.5 注:可通过pip freeze查看已安装库版本信息. Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! Django 特点 强大的数据库功能 用python的类继承,几行代码就可以拥有一个丰富,动态的数据库操作接口(API),如果需要你也能执行SQL语句. 自带的强大的后

  • python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)

    测了一下django.flask.bottle.tornado 框架本身最简单的性能.对django的性能完全无语了. django.flask.bottle 均使用gunicorn+gevent启动,单进程,并且关闭DEBUG,请求均只返回一个字符串ok. tornado直接自己启动,其他内容一致. 测试软件为 siege,测试os为cenos6 64位,测试命令为: 复制代码 代码如下: siege -c 100 -r 100 -b http://127.0.0.1:5000/ django

  • 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放到同一个目录. 为了方便编译,笔者写了一个脚本,代码如下: #!/bin/bash #============================

  • 在Linux系统上安装Python的Scrapy框架的教程

    这是一款提取网站数据的开源工具.Scrapy框架用Python开发而成,它使抓取工作又快又简单,且可扩展.我们已经在virtual box中创建一台虚拟机(VM)并且在上面安装了Ubuntu 14.04 LTS. 安装 Scrapy Scrapy依赖于Python.开发库和pip.Python最新的版本已经在Ubuntu上预装了.因此我们在安装Scrapy之前只需安装pip和python开发库就可以了. pip是作为python包索引器easy_install的替代品,用于安装和管理Python

  • 在linux系统下安装python librtmp包的实现方法

    安装librtmp包需要依赖环境较多,机器上已经安装了python2.7版本,安装librtmp包之前需要先安装依赖环境. 1.安装gcc和依赖包 yum install gcc* python-devel libffi-dev* -y 2.安装librtmp 从git上下载源码: git clone git://git.ffmpeg.org/rtmpdump cd rtmpdump/librtmp/ make && make install 3.安装setuptools wget -S

  • Linux系统下nginx日志每天定时切割的脚本写法

    使用Linux系统自带的命令logrotate对Nginx日志进行切割. Nginx安装目录:/usr/local/nginx/ Nginx日志目录:/usr/local/nginx/logs/./usr/local/nginx/logs/nginx_logs/ 1.添加nginx日志切割脚本 cd /etc/logrotate.d #进入目录 vi /etc/logrotate.d/nginx #编辑脚本 /usr/local/nginx/logs/*.log /usr/local/nginx

  • 在Linux系统上安装Spring boot应用的教程详解

    Unix/Linux 服务 systemd 服务 操作过程 1. 安装了JDK的centOS7虚拟机 注意下载linux版本JDK的时候不能直接通过wget这种直接链接下载,否则会解压不成功,应该打开原官网,点击同意许可后点击下载(这种方式下载很慢),比较好的方式是复制下载页的地址到迅雷,通过迅雷打开该下载页,同意许可后点击下载. 下载后解压.配置环境变量 tar -zxvf jdk1.8.0_211.jar.gz 环境变量配置:/etc/profile 文件最后添加如下 export JAVA

  • linux系统上传下载命令rz和sz的教程

    (一)安装方法汇总 1.安装方法(推荐) yum install lrzsz -y 2.在安装Linux系统时选中"DialupNetworking Support"组包 3.安装系统联网启动后执行yum直接安装组包 yum groupinstall "Dialup Networking Support" -y (二)上传下载文件测试 1.条件:需要使用SecureCRT或者Xshell等客户端工具连接Linux 2.上传下载命令测试 1)上传(rz) 在客户端SS

  • 通过 SSH 在远程 Linux 系统上运行命令的方法

    我们有时可能需要在远程机器上运行一些命令.如果只是偶尔进行的操作,要实现这个目的,可以登录到远程系统上直接执行命令.但是每次都这么做的话,就有点烦人了.既然如此,有没有摆脱这种麻烦操作的更佳方案? 是的,你可以从你本地系统上执行这些操作,而不用登录到远程系统上.这有什么好处吗?毫无疑问.这会为你节省很多好时光. 这是怎么实现的?SSH 允许你无需登录到远程计算机就可以在它上面运行命令. 通用语法如下所示: $ ssh [用户名]@[远程主机名或 IP] [命令或脚本] 1) 如何通过 SSH 在

  • Linux系统上实现定时重启Tomcat服务脚本介绍

    目录 一.创建Shell脚本 二.修改文件权限 三.建立定时任务 四.定时任务描述语法 1. 星号(*) 2. 逗号(,) 3. 斜杠(/) 4. 横杠(-) 五.其他 因为使用阿里云部署服务器应用时,Tomcat服务经常由于内存不足出现OutOfMemoryError异常的情况.经常过几天就需要重启一次服务器,更要命的是不知道什么时候会由于内存不足导致无法访问,如果重启不及时严重影响系统体验. 为了解决上述问题,一方面是对tomcat配置做一些优化,网上有很多文章讲解如何优化Tomcat内存设

  • 在Linux系统上安装PostgreSQL数据库

    目录 一.准备工作 二.安装PostgreSQL 2.1.选择版本 2.2.安装yum源 2.3.安装PostgreSQL 三.设置PostgreSQL 3.1.初始化数据库 3.2.设置数据库自启动 3.3.修改密码 3.4.设置允许远程连接 3.5.重启服务 3.6.修改数据库密码 3.7.使用客户端测试登录 一.准备工作 这里使用的Linux操作系统是Centos7,选择在虚拟机上面装Centos7系统,然后在虚拟机上面安装PostgreSQL. 二.安装PostgreSQL 2.1.选择

  • Python项目实战之使用Django框架实现支付宝付款功能

    一.前言 春节即将来临,大家肯定各种掏腰包花花花,小编相信大家在支付时候,微信.支付宝支付肯定是优先选择.今天小编心血来潮,为大家带来一个很有趣的项目,那就是使用Python web框架Django来实现支付宝支付,废话不多说,一起来看看如何实现吧. 二.建立django应用 我们来建立一个Django项目然后在里面创建一个应用,如图: 三.配置并启动 然后我们设置urls文件的内容,如图: 然后再在子应用中创建一个urls.py文件,当然你也可以直接将一些视图函数写在项目中的urls.py文件

随机推荐