nginx + fastcgi + c/c++环境的配置详解

使用php写后端程序的例子很多,用c/c++的比较少。

本文采用nginx,spawn,fastcgi++来构建一个基于cgi的web程序。
由于fastcgi++依赖于boost库,我们先来装boost库

Linux下编译boost

1.编译前的准备工作

sudo yum install  bzip2 bzip2-devel bzip2-libs python-devel -y

2.下载安装包并解压

#wget http://netcologne.dl.sourceforge.net/project/boost/boost/1.61.0/boost_1_61_0.zip
unzip boost_1_61_0.zip

编译安装

#cd boost_1_61_0
./bootstrap.sh
sudo ./b2 install

测试boost库是否可以使用,boost编译完成后运行程序报错,

/usr/bin/ld: warning: libboost_bzip2.so.1.61.0, needed by /usr/local/lib/libboost_iostreams.so, not found (try using -rpath or -rpath-link)
/usr/local/lib/libboost_iostreams.so: undefined reference to `BZ2_bzCompressInit'
/usr/local/lib/libboost_iostreams.so: undefined reference to `BZ2_bzCompress'
/usr/local/lib/libboost_iostreams.so: undefined reference to `BZ2_bzDecompress'
/usr/local/lib/libboost_iostreams.so: undefined reference to `BZ2_bzDecompressEnd'
/usr/local/lib/libboost_iostreams.so: undefined reference to `BZ2_bzDecompressInit'
/usr/local/lib/libboost_iostreams.so: undefined reference to `BZ2_bzCompressEnd'
collect2: ld returned 1 exit status

最开始以为是bzip2没装上,折腾了许久也没搞定,最后我发现boost的官方文档写着gcc4.4.7,而我本地的编译器是4.4.6,之后我把gcc升级到4.8重新编译通过。

redhat6.3升级gcc4.8.0编译安装方法:

1.下载源码并解压

wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.0/gcc-4.8.0.tar.bz2
tar -jxvf  gcc-4.8.0.tar.bz2

2.下载编译所需的依赖项

cd gcc-4.8.0 
./contrib/download_prerequisites 
cd ..

3.建立编译输出目录

mkdir gcc-build-4.8.0

4.进入此目录,执行以下命令,生成makefile文件

cd  gcc-build-4.8.0
../gcc-4.8.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

5.执行以下命令进行编译,编译时间比较长

make -j4

6.安装

sudo make install

安装完成后查看版本

#gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc-4.8.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 4.8.0 (GCC)

重新执行boost的编译,编写一个例子测试是否成功

#include <iostream>
#include <sstream>
#include <string>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <vector>
#include <boost/serialization/vector.hpp>
#include <fstream>
 
using namespace std;
 
using namespace boost::serialization;
using namespace boost::archive;
 
int main()
{
    vector<int> v;
    for(int i=0;i!=12;i++)
    {  
        v.push_back(i);
    }  
 
    ofstream os("file",ios::out);
 
    text_oarchive oa(os);
    oa<<v;
    os.close();   
 
    ifstream is("file",ios::in);
    text_iarchive ia(is);
 
    vector<int> vr;
    ia>>vr;
 
    is.close();
 
    for(size_t i=0;i!=vr.size();++i)                                                                          
    {
        cout<<vr[i]<<endl;
    }                                                                                                                                                                             
 
    return 0;                                                                                                 
 
}

编译运行

g++ -o main testboost.cpp -L/usr/local/lib -lboost_serialization
./main

spawn-fcgi安装

wget http://download.lighttpd.net/spawn-fcgi/releases-1.6.x/spawn-fcgi-1.6.4.tar.gz
./configure
make
make install

fastcgi安装

wget http://ftp.twaren.net/Unix/NonGNU//fastcgipp/fastcgi++-2.1.tar.bz2
tar -xvjf fastcgi++-2.1.tar.bz2
cd fastcgi++-2.1
./configure
make
make install
cd example
make examples

启动fastcgi程序

spawn-fcgi -a 172.27.18.181 -p 8081 -f /home/test/fastcgi++-2.1/examples/utf8-helloworld.fcgi

如果启动报错,可以加参数-n来看具体原因。

spawn-fcgi: child exited with:1

我的报错如下,因为升级了gcc4.8,没有升级libstdc++.so.6导致。

/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found错误的解决

strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

没有3.4.15

连接到libstdc++.so.6新的库

# cp /usr/local/lib64/libstdc++.so.6.0.18 /usr/lib64/
cd /usr/lib64/
rm -f libstdc++.so.6
ln -s libstdc++.so.6.0.18 libstdc++.so.6

再次启动fastcgi程序

spawn-fcgi -a 192.168.18.11 -p 8081 -f /home/test/fastcgi++-2.1/examples/utf8-helloworld.fcgi -n

程序会在前台运行
检查程序是否正常运行

# netstat -anp |grep 8081
tcp        0      0 192.168.18.11:8081          0.0.0.0:*                   LISTEN      4704/utf8-helloworl

配置nginx,增加

        location ~ \.fcgi$ {
            fastcgi_pass   192.168.18.11:8081;
            fastcgi_index  index.cgi;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

重新加载ngnx的配置

#nginx -s reload
1
#nginx -s reload
打开浏览器,访问http://192.168.18.11/utf8-helloworld.fcgi,你会看到。
English: Hello World

时间: 2024-09-26 12:04:02

nginx + fastcgi + c/c++环境的配置详解的相关文章

Nginx+uWSGI+Django+Python环境安装配置详解

一.安装PYTHON2.7.7: [root@hz tools]# pwd /byrd/tools [root@hz tools]# wget https://www.python.org/ftp/python/2.7.7/Python-2.7.7.tgz [root@hz tools]# tar zxf Python-2.7.7.tgz [root@hz tools]# cd Python-2.7.7 [root@hz Python-2.7.7]# ./configure --prefix=/

CentOS 7系统下的LEMP环境搭建配置详解

最近由于项目需求,将服务器从CentOS6升级到CentOS7,对应的PHP版本也升级到PHP5.6.我们熟悉的有LEMP环境一键安装包,但是本文我们将单独安装各个组件模块,并搭建一个完整的PHP运行平台. 我们常说的LNMP环境是指Linux/nginx/MySQL/PHP组合,而LEMP是什么呢?其实Nginx的发音是Engine-X = E,LEMP包是由Linux.nginx.MariaDB/MySQL和PHP组成的,那么看来LEMP和LNMP是一样的,而现在业内习惯性的称作LEMP.M

Linux下 nginx + 最新版php5.5 安装配置详解

1.nginx的安装: 首先nginx的安装需要依赖最基础的三个包,这里面我们不设计更多的扩展模块,只是安装最基础的三个包, zlib 此包主要是对http内容进行gzip压缩,减少网络传输流量 PCRE 此包主要是让nginx支持正则表达式,这个是必须装的,就连nginx的conf文件中都有正则表达式 openssl 此包主要是nginx支持https的请求 首先下载下来nginx的安装包:nginx-1.4.2.tar.gz 然后执行命令:tar -xzvf nginx-1.4.2.tar.

MySQL主从环境搭建配置详解

=Start= 缘由: 工作需要,学习需要. 正文: MySQL的主从架构: 由一个MySQL实例作为主库,接受读写请求,另外一个或多个MySQL实例通过MySQL的复制机制,将主库的数据同步到从库,从库会设置只读,防止主从数据不一致. 主从架构的好处: 如果主服务器出现问题,可以快速切换到从服务器提供服务: 可以在从服务器上执行查询,降低主服务器的压力: 可以在从服务器上执行备份,以避免备份期间影响主服务器的性能. 主从架构的局限: 由于MySQL实现的是异步复制,所以主从服务器之间的数据存在

IIS8 使用FastCGI配置PHP环境支持 过程详解

原文:IIS8 使用FastCGI配置PHP环境支持 过程详解   平时帮朋友们配置过一些PHP环境的服务器,但是一直使用的都是Apache HTTP+PHP,今天呢,我吧IIS+PHP配置方式给大家发一下下~呵呵.   在这里,我使用的是FastCGI模块映射的方式配置的,当然还有ISAPI处理程序映射,不过ISAPI的方式在PHP5.5之后就没有了,FastCGI是推荐的方式,效率相对比较高也稳定. 系统我用的是自己的笔记本,Windows 8.1,IIS是8的,当然Windows Serv

nginx技术(2)nginx的配置详解

nginx的配置 1,启动nginx [root@centos6 nginx-1.2.9]# /usr/sbin/nginx -c /etc/nginx/nginx.conf 启动nginx [root@centos6 nginx-1.2.9]# ps -ef|grep nginx 查看进程 root 5479 1 0 04:15 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf nginx 548

Linux服务器下nginx的安全配置详解_nginx

Nginx是一个轻量级,高性能的Web服务器/反向代理和电子邮件 代理(IMAP/POP3),它可以运行在UNIX,GNU/Linux,BSD变种,MAC OS X,Solaris和Microsoft Windows上.根据Netcraft的调查数据显示,互联网上6%的域名都使用了Nginx Web服务器.Nginx是解决C10K问题的服务器之一,与传统服务器不一样,Nginx不依赖于线程处理请求,相反,它使用了一个更具扩展性的事件驱 动(异步)架构.Nginx在很多高流量网站上得到了应用,如W

Linux系统安装配置PHP环境(Apache2)教程详解

在Linux环境下配置安装PHP环境(Apache2),参考了一些别人的配置方法,遇到问题上网查.下面就是安装步骤:   一.安装Apache2.2.22 1.到官网下载  http://httpd.apache.org/download.cgi    2.解压    tar  -zxvf httpd-2.2.22.tar.gz 3.建立目标文件夹(注意以下所有操作都时在root用户下执行的)    mkdir /usr/local/apache2    也就是说等下安装的apache2要安装到

Flume环境部署和配置详解及案例大全_Linux

一.什么是Flume? flume 作为 cloudera 开发的实时日志收集系统受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OGoriginal generation属于 cloudera.但随着 FLume 功能的扩展Flume OG 代码工程臃肿.核心组件设计不合理.核心配置不标准等缺点暴露出来尤其是在 Flume OG 的最后一个发行版本 0.94.0 中日志传输不稳定的现象尤为严重为了解决这些问题2011 年 10 月 22 号cloudera 完成