如何配置apache2和fastCGI来运行我的c ++应用程序

时间:2010-09-23 19:45:48

标签: c++ apache fastcgi

我用c ++编写了一个程序并用gcc编译它(就像fastcgi.com中的样本一样),但我不知道如何在localhost上运行它。

我搜索的每个地方,我发现mod_fcgi的php配置无法正常工作 对于c ++。

是否有任何正文配置apache和mod_fcgi来运行c ++ Web应用程序???

2 个答案:

答案 0 :(得分:9)

mod_fcgi?我发现只有mod_fastcgi和mod_fcgid。 Apache配置看起来非常简单。让我们编译FastCGI示例并创建一个简约的Apache实例来提供它:

  1. 安装libfcgi-dev

  2. 在某处创建临时目录并从https://opensource.apple.com/source/FastCGI/FastCGI-4/fcgi/doc/fcgi-devel-kit.htm#S3.1

    编译示例

    当你只是运行它时,它已经有了一些输出:

    $ ./tiny-cgi 
    Content-type: text/html
    
    <title>FastCGI Hello!</title><h1>FastCGI Hello!</h1>Request number 1 running on host <i>(null)</i>
    
  3. 安装apache2和libapache2-mod-fcgid;创建配置文件apache.conf:

    User www-data
    Listen 8080
    PidFile apache.pid
    DocumentRoot .
    LoadModule fcgid_module /usr/lib/apache2/modules/mod_fcgid.so
    SetHandler fcgid-script
    Options +ExecCGI
    ErrorLog error.log
    

    用户www-data非常重要,因为它可以访问/var/lib/apache2/fcgid/sock/,这对fcgid来说非常重要(我在Debian上运行,也许在其他地方会有所不同)。将DocumentRoot与其余目录放在同一目录中并不是很好,但这只是一个简单的例子。

  4. 运行sudo /usr/sbin/apache2 -d . -f apache.conf -X

    -X用于调试模式,当服务器没有守护进程(不分离)时,这对于这种播放非常方便。

  5. 转到http://localhost:8080/tiny-cgi,您将看到FastCGI程序的输出。如果没有,请参阅error.log

  6. 停止Apache,安装libapache2-mod-fastcgi,将配置中的两行替换为:

    LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so
    SetHandler fastcgi-script
    
  7. 再次访问http://localhost:8080/tiny-cgi

答案 1 :(得分:3)

这是我在家里开发电脑的一个例子。它是运行在127.0.0.1:90上的C ++ Web服务,我正在测试/调试。 “FcgidIOTimeout”设置为3600,因此当我使用gdb(调试器)逐步执行fcgi进程时,mod_fcgid不会超时等待响应。如果在调试时超时,fcgi应用程序将被终止。更进一步说,有一个ScriptAlias和一个目录告诉Apache cgi文件夹在哪里...“/ home / dgnorton / prj / dfi / build / src /”...这是我项目的构建输出文件夹。您还需要检查该目录的权限。

我只在家用系统上使用它进行调试。在使用任何此类文件之前,请阅读Apache和mod_fcgid文档。

Listen 90

NameVirtualHost 127.0.0.1:90

<VirtualHost 127.0.0.1:90>
   ServerName www.example1.com
   DocumentRoot /var/www/dfi

   <IfModule fcgid_module> 
      FcgidIOTimeout 3600
   </IfModule>

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi/ /home/dgnorton/prj/dfi/build/src/
    <Directory "/home/dgnorton/src/dfi/build/src">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>