【问题标题】:how to config apache2 and fastCGI to run my c++ application如何配置 apache2 和 fastCGI 来运行我的 C++ 应用程序
【发布时间】:2010-09-23 19:45:47
【问题描述】:

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

在我搜索的所有地方,我发现 mod_fcgi 的 php 配置不起作用 对于 c++。

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

【问题讨论】:

  • 您能否发布您的源代码、配置文件以及您尝试运行程序的方式?如果没有这些信息,这是一个非常令人困惑且难以回答的问题。

标签: c++ apache fastcgi


【解决方案1】:

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

【讨论】:

  • 当我尝试运行 'sudo /usr/sbin/apache2 -d 。 -f apache.conf -X' 命令,我得到以下错误。 'AH00534:apache2:配置错误:未加载 MPM'。为什么?
【解决方案2】:

这是我家中的开发 PC 的示例。这是我正在测试/调试的在 127.0.0.1:90 上运行的 C++ Web 服务。 “FcgidIOTimeout”设置为 3600,因此当我使用 gdb(调试器)逐步完成 fcgi 进程时,mod_fcgid 不会超时等待响应。如果在调试时超时,fcgi 应用程序将被杀死。再往下一点,有一个 ScriptAlias 和一个 Directory 告诉 Apache cgi 文件夹在哪里..."/home/dgnorton/prj/dfi/bu​​ild/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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 2015-11-24
    相关资源
    最近更新 更多