我用c ++编写了一个程序并用gcc编译它(就像fastcgi.com中的样本一样),但我不知道如何在localhost上运行它。
我搜索的每个地方,我发现mod_fcgi的php配置无法正常工作 对于c ++。
是否有任何正文配置apache和mod_fcgi来运行c ++ Web应用程序???
答案 0 :(得分:9)
mod_fcgi?我发现只有mod_fastcgi和mod_fcgid。 Apache配置看起来非常简单。让我们编译FastCGI示例并创建一个简约的Apache实例来提供它:
安装libfcgi-dev
在某处创建临时目录并从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>
安装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与其余目录放在同一目录中并不是很好,但这只是一个简单的例子。
运行sudo /usr/sbin/apache2 -d . -f apache.conf -X
-X
用于调试模式,当服务器没有守护进程(不分离)时,这对于这种播放非常方便。
转到http://localhost:8080/tiny-cgi
,您将看到FastCGI程序的输出。如果没有,请参阅error.log
。
停止Apache,安装libapache2-mod-fastcgi,将配置中的两行替换为:
LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so
SetHandler fastcgi-script
再次访问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>