Nginx下配置C和Python的cgi程序实例
先来理解一下什么是cgi:
Common Gateway Interface,简称CGI。在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。(百度百科)
我使用的是Nginx+FastCGI支持C语言程序,使用Nginx+uwsgi支持Python的cgi程序。下面是详细的步骤。(下面的操作我均是用root权限做的,如果您使用普通权限出现错误的时候,可以尝试使用root权限操作)
第一部分:Nginx与FastCGI
一、安装Nginx环境
1、配置所有Nginx需要的依赖软件包。pcre、zlib、libssl等。
# apt-get install libpcre3* zlib1g libssl* make gcc
2、下载Nginx软件包。
# wget http://nginx.org/download/nginx-1.2.1.tar.gz
3、安装Nginx
# tar zxvf nginx-1.2.1.tar.gz
# cd nginx-1.2.1/
# ./configure
# make
# make install
友情提示:./configure和make可以使用普通用户权限就完成,但是,make install必须使用超级用户权限,下同.
Nginx默认会被/usr/local/nginx目录下。
4、/usr/local/nginx/sbin/nginx即为启动程序。有如下常用参数:
-c 为nginx指定一个配置文件,来代替缺省的配置文件。
-v 显示nginx的版本。
-V 显示nginx的详细版本信息。
-s 发送信号,可用的有:stop,quit,reopen,reload
-t 不运行,仅仅测试配置文件,检查语法的正确性。
启动程序的时候可能会出现类似的错误:
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.0: cannot open ?shared object file: No such file or directory,
解决办法:
# ln -s /usr/local/lib/libpcre.so.0 /usr/lib/libpcre.so.0
5、察看nginx主程序的进程号:
# ps aux | grep "nginx: master" | grep -v "grep"|awk '{print $2}'
或
# cat /usr/local/nginx/logs/nginx.pid
6、重新加载nginx的配置文件:
# kill -HUP PID
或
# nginx -s reload
- nginx的配置文件目录:/usr/local/nginx/conf
- nginx的WEB文件目录:/usr/local/nginx/html
- nginx可执行文件的目录:/usr/local/nginx/sbin
- 可以运行/usr/local/nginx/sbin/nginx来启动nginx,并使用浏览器来测试nginx是否安装和启动成功,如果看到"Welcome to nginx!"的欢迎页面,则表示已经成功完成nginx的安装和启动。
二、安装FastCGI
1、下载安装包:wget http://www.lighttpd.net/download/spawn-fcgi-1.6.0.tar.gz
2、下载安装包:wget http://www.fastcgi.com/dist/fcgi.tar.gz
3、安装fcgi包
# tar zxvf fcgi.tar.gz
# cd fcgi-2.4.1-SNAP-0311112127/
# ./configure
# make
# make install
如果出现关于fcgio.cpp文件的EOF的错误,需要在./libfcgi/fcgio.cpp的文件头地方,加入
#include <stdio.h>
然后再进行安装过程。
4、安装spawn-fcgi
# tar zxvf spawn-fcgi-1.6.0.tar.gz
# cd spawn-fcgi-1.6.0/
# ./configure
# make
# make install
三、编写C的web脚本
1、编写如下测试程序,保存为a.c
#include <iostream>
#include <stdlib.h>
#include <fcgi_stdio.h>
using namespace std;
int main(){
int count = 0;
while (FCGI_Accept() >= 0)
{
printf("Content-type: text/html\r\n"
"\r\n"
"FastCGI Hello! (C, fcgi_stdio library)"
"Request number %d running on host %s "
"Process ID: %d\n",
++count,
getenv("SERVER_NAME"), getpid());
}
return 0;
}
2、编译:g++ -o hello a.c -lfcgi
3、将编译出来的二进制文件hello,拷贝到/usr/local/nginx/fastcgi目录下,如果没有这个目录、可以自己新建,下面会用到这个文件。
四、修改nginx的配置文件
1、vim /usr/local/nginx/conf/nginx.conf
2、 添加如下几行:
location ~ \.cgi$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
3、保存退出
4、重新加载nginx配置文件nginx -s reload。
五、启动hello
# spawn-fcgi -a 127.0.0.1 -p 9000 -C25 -u www-data -f /usr/local/nginx/fastcgi/hello
如果出现spawn-fcgi: child exited with: 127 提示,则:
# ln -s /usr/local/lib/libfcgi.so.0 /usr/lib/libfcgi.so.0
查看效果,http://ip/111.cgi,将会看到如下结果:
FastCGI Hello! (C, fcgi_stdio library)Request number 1 running on host localhost Process ID: 29770
第二部分 Nginx与uwsgi
一、安装依赖和uwsgi
# apt-get install python-setuptools
# apt-get install python-dev
# wget uwsgi:wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
# tar zxvf uwsgi-latest.tar.gz
# cd uwsgi-1.2.4/
# python setup.py build
# make
# cp uwsgi /usr/bin
二、配置Nginx
# vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
uwsgi_pass 127.0.0.1:9001;
include uwsgi_params;
}
把另外一个
location /{
...
}
注释掉
三、编写python测试脚本
# cat /usr/local/nginx/html/hello.py
#!/usr/bin/python
def application(environ,start_response):
start_response('200 OK',[('Content-Type','text/plain')])
yield 'Hello Wrold....'
四、启动nginx和uwsgi
1、启动nginx: nginx
2、cd /usr/local/nginx/html
3、启动uwsgi:uwsgi -s 127.0.0.1:9001 -C -w hello (最好把uwsgi二进制文件拷贝一份到保存python文件的目录下,然后使用./uwsgi方式执行)。
4、另外一种启动uwsgi的方法,编写xml文件。如下app.xml
<uwsgi>
<socket>127.0.0.1:9001</socket>
<module>hello</module>
<processes>4</processes>
<master/>
</uwsgi>
启动方式:./uwsgi -x app.xml 功能同上。
完成以上步骤,尝试在浏览器中输入:http://ip/ 会转到python的web页面,使用http://ip/123.cgi 会转到c的web页面程序。
当前暂无评论 »