转:Apache+Fastcgi+Django
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的更多相关文章
- Window下python2.7+Apache+mod_wsgi+Django服务器配置
前言:试着使用python搭建一个网页,分别在windows下和linux下,本篇文章主要讲解Window下python+Apache+mod_wsgi+Django服务器配置过程中遇见的问题和解决方 ...
- Apache部署django项目
在此之前,我们一直使用django的manage.py 的runserver 命令来运行django应用,但这只是我们的开发环境,当项目真正部署上线的时候这做就不可行了,必须将我们的项目部署到特定的w ...
- apache部署django记录
在ubuntu下通过apache部署django 首先需要下载python,django,apache以及wsgi模块 python基本已经自带,我用的是2.7,不是的话可以重新装一个 下载djang ...
- Windows下Apache+mod_python+Django配置
Windows下Apache+mod_python+Django配置 Apache 首先要安装Apache,我安装的版本是2.2.*: Python python肯定是要安装的,我安装的版本是2.5的 ...
- Linux +apache+fastcgi运行c/c++
在Linux上搭建apache+fastcgi环境,说多了都是泪啊. 花费我几天时间,开源软件虽说好用,但是版本众多,文档缺乏,什么都只能自己摸索. 终于成功运行起来,特此记录. 一. apache ...
- Windows+Apache+Python+Django 踩坑记录
摘要 使用Python进行Web项目开发:相对于主流三大Web端解决方案(Java/.NET/PHP) Python在某些方面具有一定的优势,相对 Java/.NET 有更轻量级的部署方案,相对PHP ...
- Ubuntu14.04 Server amd64 配置 Apache+MySQL+Django
写在前面 因为不同版本的apache等软件文件夹和配置文件的名称设置都不尽相同,网上累死累活查了好多个博客就没一个能成功配出来的. 所以本文也不一定能帮到你,请在确定对自己有用之前不要盲目转载,以免给 ...
- Nginx + FastCGI + Django在windows上部署及nginx常用命令
一般应用都是部署在linux系统上,不会在windows上部署,emmm..所以有兴趣的就瞧瞧吧哈哈 nginx工作原理: nginx用于处理静态文件,动态部分经由fastcgi .scgi或uWSG ...
- apache(nginx)+django+virutalenv(virtualenvwrapper)+gunicorn+supervisor配置高效web环境
前言 django的调试模式配置简单,用于测试十分方便,但众所周知,这个只适合于调试,生产上运行效率十分低下. 后来考虑用nginx+uwsgi的模式进行,但之前配置过apache+wsgi的方式,感 ...
随机推荐
- Eclipse中安装插件的三种方式
转载自:http://www.cnblogs.com/lcgustc/archive/2013/01/03/2843496.html Eclipse也用了很久,但是都没有怎么去研究过怎么安装插件,今天 ...
- JS常见的算法
原文链接:Jack Pu's Blog 虽说我们很多时候前端很少有机会接触到算法.实际上学习数据结构与算法对于工程师去理解和分析问题都是有帮助的.如果将来当我们面对较为复杂的问题,这些基础知识的积累可 ...
- [USACO06NOV] Roadblocks
https://www.luogu.org/problem/show?pid=2865 题目描述 Bessie has moved to a small farm and sometimes enjo ...
- HTML5实体刮刮乐效果!
先来看DEMO吧,http://codepen.io/jonechen/pen/ZOyxmq HTML部分: <div class="msg"> <a href= ...
- Send Email in Robot Framework Python Using Gmail
转载自:http://seleniummaster.com/sitecontent/index.php/selenium-robot-framework-menu/selenium-robot-fra ...
- SpringBoot jar包不支持jsp
官方原文如下: When running a Spring Boot application that uses an embedded servlet container (and is packa ...
- Java应用调试利器——BTrace教程
http://www.jianshu.com/p/26f19095d396 背景 生产环境中可能出现各种问题,但是这些问题又不是程序error导致的,可能是逻辑性错误,这时候需要获取程序运行时的数据信 ...
- 【BZOJ】1419 Red is good
[算法]期望DP [题解]其实把状态表示出来就是很简单的期望DP. f[i][j]表示i张红牌,j张黑牌的期望. i=0时,f[0][j]=0. j=0时,f[i][0]=i. f[i][j]=max ...
- 两小时快速构建微信小程序
小程序在2017年1月上线之初,被社会极力吹捧,刻意去将其制造为一个“风口”,透支其价值.但是在之后一个月里,石破天惊迅速归为沉寂.媒体又开始过度消费小程序,大谈其鸡肋之处. 个人认为小程序的一个分水 ...
- Part2-HttpClient官方教程-Chapter5-流利的API
5.1. 易于使用的Facade API 使用之前注意引入相应Jar包或者Maven依赖 <dependency> <groupId>org.apache.httpcompon ...