07年作者就贴出的文章了,可见多么古老的运行方式还在用。

转:http://www.cnblogs.com/RChen/archive/2007/03/23/django_fcgi.html

首先要安装 flup (http://www.saddi.com/software/flup/),
这是 Python 处理 FastCGI 的库。

FactCGI 采用 c/s 模型,独立的运行一个进程。在需要处理请求时,web 服务器(apache, httpd,..)直接和 FactCGI 进程进行通信即可。

web 服务器可通过两种办法和 FastCGI server 连接:
1. Unix domain socket(或 win32 的“命名管道")
2. TCP socket
通常 TCP socket 更简单,因为权限问题比较好配置。

如何启动 FactCGI 服务器:
到项目目录中,执行:
./manage.py runfcgi [options]
如果要看帮助:
./manage.py runfcgi help

在选项中,需要指定一个 socket 或 host 和 port 的组合,这样的话,当你启动 web server 时,就可以通过这些信息来连接到 FactCGI 服务器。

例子

在 TCP 端口中运行一个线程内服务器:
./manage.py runfcgi method=threaded host=127.0.0.1 port=3033

在 Unix domain socket 上运行一个 preforked 服务器:
./manage.py runfcgi method=prefork socket=/home/user/mysite.sock pidfile=django.pid

不作为后台进程执行(便于调试):
./manage.py runfcgi daemonize=false socket=/tmp/mysite.sock

如何停止后台的 FastCGI 进程:
1. 如果指定了 pidfile 属性,则可以这样:kill `cat $PIDFILE`。其中 $PIDFILE 是你指定的 pidfile 选项。

要重启 Unix 上的后台 FactCGI 进程,可执行下列 shell 脚本:

#!/bin/bash

# Replace these three settings.
PROJDIR="/home/user/myproject"
PIDFILE="$PROJDIR/mysite.pid"
SOCKET="$PROJDIR/mysite.sock"

cd $PROJDIR
if [ -f $PIDFILE ]; then
    kill `cat -- $PIDFILE`
    rm -f -- $PIDFILE
fi

exec /usr/bin/env - \
  PYTHONPATH="../python:.." \
  ./manage.py runfcgi socket=$SOCKET pidfile=$PIDFILE

Apache 的设定:
1. 需要安装了 mod_fastcgi
2. 编辑 httpd.conf:
   (1) 用 FastCGIExternalServer 指向 FastCGI 服务器的位置
 可以用 socket 也可以用主机+端口的方式指定。例子:

# Connect to FastCGI via a socket / named pipe.
 FastCGIExternalServer /home/user/public_html/mysite.fcgi -socket /home/user/mysite.sock

# Connect to FastCGI via a TCP host/port.
 FastCGIExternalServer /home/user/public_html/mysite.fcgi -host 127.0.0.1:3033

不管上述那种情况,/home/user/public_html/mysite.fcgi 这个文件是不需要存在的。其作用指示作为一个 URL 指示 Web 服务器哪些请求需要被 FastCGI 来处理。

(2) 用 mod_rewrite 来分派需要处理的 URL 到 FastCGI.

例子:
 <VirtualHost 12.34.56.78>
   ServerName example.com
   DocumentRoot /home/user/public_html
   Alias /media /home/user/python/django/contrib/admin/media
   RewriteEngine On
   RewriteRule ^/(media.*)$ /$1 [QSA,L]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^/(.*)$ /mysite.fcgi/$1 [QSA,L]
 </VirtualHost>
 
 这里指示的重写后的 url 就是上面 FastCGIExternalServer 中那个。
 上述配置将不是 /media/ 开头的,或者指向不存在的文件的请求,转给了 FastCGI.

lighttpd 配置

lighttpd 天然的支持 FastCGI.
首先要确认你的 mod_fastcgi 在模块列表中,并且在 mod_rewrite 和 mod_access 后,在 mod_accesslog 前。
为了服务 admin media, 也许你还需要 mod_alias.
在 lighttpd 的配置文件中加如下一段:

server.document-root = "/home/user/public_html"
fastcgi.server = (
    "/mysite.fcgi" => (
        "main" => (
            # Use host / port instead of socket for TCP fastcgi
            # "host" => "127.0.0.1",
            # "port" => 3033,
            "socket" => "/home/user/mysite.sock",
            "check-local" => "disable",
        )
    ),
)
alias.url = (
    "/media/" => "/home/user/django/contrib/admin/media/",
)

url.rewrite-once = (
    "^(/media.*)$" => "$1",
    "^/favicon\.ico$" => "/media/favicon.ico",
    "^(/.*)$" => "/mysite.fcgi$1",
)

还可以在一个 lighttp 服务器上跑多个 Django. 只要为每一个应用指定一个独立的 FastCGI host.

如何在共享的 web hosting 上运行 Django / Apache:

编辑 .htaccess:
AddHandler fastcgi-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ mysite.fcgi/$1 [QSA,L]

再写一个 mysite.fcgi 的可执行的脚本:

#!/usr/bin/python
import sys, os

# Add a custom Python path.
sys.path.insert(0, "/home/user/python")

# Switch to the directory of your project. (Optional.)
# os.chdir("/home/user/myproject")

# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "myproject.settings"

from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")

在更新代码后,可以通过重新上传 mysite.fcgi 文件来指示 Apache 重启 Django 程序。
如果有 shell 权限,可以直接用 touch 命令改变时间戳:
touch mysite.fcgi

转:Apache+Fastcgi+Django的更多相关文章

  1. Window下python2.7+Apache+mod_wsgi+Django服务器配置

    前言:试着使用python搭建一个网页,分别在windows下和linux下,本篇文章主要讲解Window下python+Apache+mod_wsgi+Django服务器配置过程中遇见的问题和解决方 ...

  2. Apache部署django项目

    在此之前,我们一直使用django的manage.py 的runserver 命令来运行django应用,但这只是我们的开发环境,当项目真正部署上线的时候这做就不可行了,必须将我们的项目部署到特定的w ...

  3. apache部署django记录

    在ubuntu下通过apache部署django 首先需要下载python,django,apache以及wsgi模块 python基本已经自带,我用的是2.7,不是的话可以重新装一个 下载djang ...

  4. Windows下Apache+mod_python+Django配置

    Windows下Apache+mod_python+Django配置 Apache 首先要安装Apache,我安装的版本是2.2.*: Python python肯定是要安装的,我安装的版本是2.5的 ...

  5. Linux +apache+fastcgi运行c/c++

    在Linux上搭建apache+fastcgi环境,说多了都是泪啊. 花费我几天时间,开源软件虽说好用,但是版本众多,文档缺乏,什么都只能自己摸索. 终于成功运行起来,特此记录. 一. apache ...

  6. Windows+Apache+Python+Django 踩坑记录

    摘要 使用Python进行Web项目开发:相对于主流三大Web端解决方案(Java/.NET/PHP) Python在某些方面具有一定的优势,相对 Java/.NET 有更轻量级的部署方案,相对PHP ...

  7. Ubuntu14.04 Server amd64 配置 Apache+MySQL+Django

    写在前面 因为不同版本的apache等软件文件夹和配置文件的名称设置都不尽相同,网上累死累活查了好多个博客就没一个能成功配出来的. 所以本文也不一定能帮到你,请在确定对自己有用之前不要盲目转载,以免给 ...

  8. Nginx + FastCGI + Django在windows上部署及nginx常用命令

    一般应用都是部署在linux系统上,不会在windows上部署,emmm..所以有兴趣的就瞧瞧吧哈哈 nginx工作原理: nginx用于处理静态文件,动态部分经由fastcgi .scgi或uWSG ...

  9. apache(nginx)+django+virutalenv(virtualenvwrapper)+gunicorn+supervisor配置高效web环境

    前言 django的调试模式配置简单,用于测试十分方便,但众所周知,这个只适合于调试,生产上运行效率十分低下. 后来考虑用nginx+uwsgi的模式进行,但之前配置过apache+wsgi的方式,感 ...

随机推荐

  1. echarts 使用demo

    <!DOCTYPE html> <head> <meta charset="utf-8"> <title>ECharts</t ...

  2. idea中设置springboot热部署

    在idea中设置springboot热部署,项目修改的时候不用手动重启应用 1,pom中添加依赖 <dependency> <groupId>org.springframewo ...

  3. 调戏OpenShift:一个免费能干的云平台(已失效)

    一.前因后果 以前为了搞微信的公众号,在新浪sae那里申请了一个服务器,一开始还挺好的 ,有免费的云豆送,但是一直运行应用也要消费云豆,搞得云豆也所剩无几了.作为一名屌丝,日常吃土,就单纯想玩一玩微信 ...

  4. bzoj 2200: [Usaco2011 Jan]道路和航线——拓扑+dijkstra

    Description Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查.他想把牛奶送到T个城镇 (1 <= T <= 25,000),编号为1T.这些城镇之间通过R条 ...

  5. VSCode Web Developement for Javascript. Must have plugins.

    Es6 Javascript front-end web developemnt must have plugins Prettier - Code Formatter Javascript (ES6 ...

  6. TensorFlow非线性拟合

    1.心得: 在使用TensorFlow做非线性拟合的时候注意的一点就是输出层不能使用激活函数,这样就会把整个区间映射到激活函数的值域范围内无法收敛. # coding:utf-8 import ten ...

  7. apache log 按日期记录 格式 <GOOD>-- (转)

    在apache的配置文件中找到ErrorLog logs/error_logCustomLog logs/access_log common Linux系统配置方法: 将其改为ErrorLog “| ...

  8. Django【进阶】数据库查询性能相关

    之前项目中没有考虑过数据库查询关于效率的问题,如果请求量大,数据庞大,不考虑性能的话肯定不行.     tips:如图之前我们遇到过,当添加一张表时,作为原来表的外键,要给个默认值,现在我们写null ...

  9. 访问dubbo没有权限,通过ip进行跳转服务器,并通过有权限服务器代理访问

    #启动ip跳转 echo 1 > /proc/sys/net/ipv4/ip_forward vi /etc/sysctl.conf net.ipv4.ip_forward =1 sysctl ...

  10. node.js2

    同步是指:同步阻塞操作,异步是指:异步非阻塞操作. 第一部分:fs模块 1.引入fs模块 require('fs'); 2.写文件 01.异步写:writeFile fs.writeFile(path ...