分布式(1):nginx+spawn-fcgi+fchi + c++ 环境搭建

本文介绍如何在Ubuntu Kylin环境下安装Nginx及自定义编译过程,并详细阐述了FastCGI的安装配置步骤,包括spawn-fcgi的安装、fcgi程序的编写与部署,最终实现通过Nginx转发请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装环境: Ubuntu Kylin 16.4 64位中文版  内核4.4.0

内存: 2G

1.安装: nignx

sudo apt-get install nignx

自动安装版本: nginx version: nginx/1.10.0 (Ubuntu)

安装之后ps -aux |grep nginx 看到一个master两个worker

 nginx软件安装后相关文件位置
     1.下载的软件存放位置    /var/cache/apt/archives
     2.安装后软件默认位置  /usr/share
     3.可执行文件位置  /usr/sbin/     有的可能在/usr/bin目录下,看运行的master就知道在那个目录下
     4.配置文件位置  /etc/nginx/   有的直接在/etc文件下
     5.lib文件位置   /usr/lib 

自定义编译安装方法:

     1. nginx下载目录 http://nginx.org/en/download.html  是nginx-1.5.10 
    2. 下载以后解压并安装(请记得看README)
     ./configure (注意了类似checking for *** ... not found项,可能是依赖包没有,则需要安装依赖包)
             缺少pcre,则需要额外安装 http://www.pcre.org/ (或者采用apt-get或yum的安装方式)
             缺少zlib,则需要额外安装 http://www.zlib.net/ (或者采用apt-get或yum的安装方式)  
            缺少OpenSSL,则需要额外安装 http://www.openssl.org (或者采用apt-get或yum的安装方式)  
            如果需要配置安装额外的功能模块,可以参考这里 http://wiki.codemongers.com/NginxChsInstall
      make
      make install (默认安装到/usr/local/nginx)


    [配置和管理]    
    1)执行选项
        -c </path/to/config> 为 Nginx 指定一个配置文件,来代替缺省的。不输入则使用默认的配置文件。
        -t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
        -v 显示 nginx 的版本。
        -V 显示 nginx 的版本,编译器版本和配置参数。

    2)检查配置文件
        sudo ./nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

     3)启动 - 默认和特殊
        /usr/sbin/nginx (默认启动方式)
        /usr/sbin/nginx -c /etc/nginx/nginx.conf (指定配置文件启动)
    
    4)查看nginx进程号(master是主进程)
        ps -ef | grep nginx 


    5)重新加载配置文件
        sudo kill -HUP [nginx主进程号]
        通过系统的信号控制 Nginx
        可以使用信号系统来控制主进程。默认,nginx 将其主进程的 pid 写入到 /run/nginx.pid 文件中。
        通过传递参数给 ./configure 或使用 pid 指令,来改变该文件的位置。
        
        主进程可以处理以下的信号:
        命令
        TERM, INT 快速关闭
        QUIT 从容关闭
        HUP 重载配置   用新的配置开始新的工作进程,从容关闭旧的工作进程
        USR1 重新打开日志文件
        USR2 平滑升级可执行程序
        WINCH 从容关闭工作进程
 
    6)默认目录结构 可以使用 find "nginx" / |xargs grep nginx 查看各个目录
        主目录:/usr/local/nginx/
        配置目录:/etc/nginx/nginx.conf
        root目录:/usr/share/nginx/html


2.spawn_fastcgi的安装、部署与配置

  下载地址: https://github.com/lighttpd/spawn-fcgi  或者 http://redmine.lighttpd.net/projects/spawn-fcgi/news
    这里使用的是1.6.4的版本 https://github.com/lighttpd/spawn-fcgi/releases/tag/v1.6.4

 (1)解压,进入源码目录,方法同上,新建/home/wensheng/fastcgi/spawn/目录。
      在配置之前先运行./autogen.sh
(2)配置
     ./configure  --prefix=/home/wensheng/fastcgi/spawn/
(3)然后依次输入
     make
     make install
(4)进入到_install目录
     把bin目录下生成的程序拷贝到nginx服务器的安装目录下的sbin目录里面去,例如我的安装目录是/user/sbin\


3. fcgi的安装、部署与配置
  源码下载云盘 http://pan.baidu.com/s/1bo2FpN5  官网的http://www.fastcgi.com/dist/fcgi.tar.gz这个总是打不开
  也可以下载fastcgi++,但是需要boost等库的支持


  我下载的是fcgi-2.4.0
   (1)要编写fastcgi程序,需要使用到fastcgi的头文件。要运行fastcgi程序需要依赖库文件。通过fastcgi源码去         
得到头文件和库将下载好的fastcgi压缩文件解压.


    (2)然后进入include目录,找到fcgio.h文件;打开该文件,加入一行代码 #include <cstdio> ,
      #include <iostream>
      #include "fcgiapp.h"
      #include <cstdio>  //添加这一行
      #ifndef DLLAPI
      #ifdef _WIN32
      #define DLLAPI __declspec(dllimport)
这是因为gcc编译器更新的比较快,比较新,而fastcgi版本比较旧,可能存在一些不兼容的问题,在make的时候会报错。
    
    (3)创建文件夹/home/wensheng/fastcgi/fcgi

    (4)然后配置,通过参数--prefix来指定一会make install的文件都放到指定目录,prefix后面跟的是绝对路径,大家根据自己的实际情况来填写路径,只要最后指到新建的/home/wensheng/fastcgi/fcgi目录就正确。配置命令如下:
       ./configure  --prefix=/home/wensheng/fastcgi/fcgi
       make
       make install

    (5)将库文件拷贝主lib库: cp /home/wensheng/fastcgi/fcgi/lib/libfcgi.so.0 /usr/lib/



4. 用c++编写fcgi程序
   test.cpp文件
   #include <fcgi_stdio.h>
   #include <stdlib.h>
   int main() {
    int count = 0;
    int i = 0;
    while (FCGI_Accept() >= 0) {
        printf("Content-type: text/html\r\n"
                "\r\n"
                ""
                "FastCGI Hello!"
                "Request number %d running on host%s "
                "Process ID: %d\n", ++count, getenv("SERVER_NAME"), ++i);
    }
    return 0;
}

 在之前解压的文件夹下或者在/home/wensheng/fastcgi/fcgi/include/编写text.cpp
 或者将/home/wensheng/fastcgi/fcgi/include/ 和/home/wensheng/fastcgi/fcgi/lib/文件夹加载到path
如:
  #增加.so搜索路径
   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/wensheng/fastcgi/fcgi/lib/     
  #增加.a搜索路径
  export LIBRARY_PATH=$LIBRARY_PATH:/home/wensheng/fastcgi/fcgi/lib/    
  #增加bin搜索路径
  export PATH=$PATH:/home/wensheng/fastcgi/fcgi/bin
  #增加GCC的include文件搜索路径
  export C_INCLUDE_PATH=$C_INCLUDE_PATH:/home/wensheng/fastcgi/fcgi/include   
  #增加G++的include文件搜索路径
  export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/home/wensheng/fastcgi/fcgi/include

编译:
 g++ text.cpp -o text -lfcgi

有两点稍微说明一下:
 (1) 在while(FCGI_Accept() >= 0)循环的外面可以放一些变量定义等等,实际的操作语句放到while循环里面,fcgi的工作方式是,网页一旦请求,那么就触发fcgi程序,每请求一次,while就循环一次。
 (2)"Conten-type:text/html\r\n"这个代码一定要加上。


5. 发布web服务:
 1. 因为nginx的安装目录是/usr/sbin/  需要将./ext可执行文件拷入该地址

 2. 启动spawn-fcgi管理进程,并绑定server IP和端口(不要跟nginx的监听端口重合)
    因为之前将spawn-fcgi拷贝到了/usr/sbin目录: /usr/sbin# ./spawn-fcgi -a 127.0.0.1 -p 8088 -f /usr/sbin/text
    查看一下8088端口是否已成功:netstat -na | grep 8088

 3. 更改nginx.conf配置文件,让nginx转发请求
    vim /etc/nginx/nginx.conf
    找到http节点下的server节点,我的没有找到,但是包含了下面两个文件
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
    进入/etc/nginx/sites-enabled/default文件发现有server节点
   
 4.修改server节点
  server {
        listen 80 default_server;
        server_name  localhost;  # 添加该行
        index index.html index.htm index.php  # 添加该行       
       #以下新加的就是代理的服务器 "location ~ \.cgi"表示的是location下任何cgi地址地址都会映射到这里,也可以指定"location ~ /test.cgi"表示只有test.cgi可以映射到这里
       location ~ \.cgi
        {
           fastcgi_pass 127.0.0.1:8088;
           fastcgi_index index.cgi;
           fastcgi_param SCRIPT_FILENAME fcgi$fastcgi_script_name;
           include fastcgi_params;
        }
    }

  5. 重启nginx或者重新加载配置文件
     a.重新加载配置文件: sudo kill -HUP nginx的master进程id
     b.重启nginx
        杀掉所有nginx人后./nginx
  
  6.打开浏览器访问:
     http://localhost/text.cgi
   显示的是FastCGI Hello!Request number 10 running on hostlocalhost Process ID: 10 成功


 参考文献与资料
    [1]Nginx+FastCGI运行原理​  http://book.51cto.com/art/201202/314840.htm
    ​[2]Nginx下配置FastCGI  http://www.cppblog.com/woaidongmao/archive/2011/06/21/149090.html
    [3]nginx+fastcgi+c/c++搭建高性能Web框架  http://blog.youkuaiyun.com/marising/article/details/3932938
    [4]什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI  http://www.mike.org.cn/articles/what-is-cgi-fastcgi-php-fpm-spawn-fcgi/

    [5]:http://blog.youkuaiyun.com/yo746862873/article/details/51892504

    [6]https://segmentfault.com/a/1190000002797601





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值