2010-09-23 11 views
9

He escrito un programa con C++ y lo compilé con gcc (como el ejemplo en fastcgi.com) pero no sé cómo ejecutarlo en localhost.cómo configurar apache2 y fastCGI para ejecutar mi aplicación C++

en todas partes que busqué, encontré la configuración de php para mod_fcgi que no funcionará para C++.

¿algún cuerpo configuró apache y mod_fcgi para ejecutar una aplicación web de C++ ???

+0

Se puede publicar su fuente, archivos de configuración, y cómo se trató de ejecutar su programa? Esta es una pregunta muy confusa y difícil de responder sin esta información. –

Respuesta

9

mod_fcgi? He encontrado solo mod_fastcgi y mod_fcgid. La configuración de Apache parece bastante simple para ambos. Vamos a recopilar ejemplo FastCGI y crear una instancia de Apache minimalista para servirla:

  1. Instalar libfcgi-dev

  2. Crear directorio temporal en algún sitio y compilar el ejemplo de https://opensource.apple.com/source/FastCGI/FastCGI-4/fcgi/doc/fcgi-devel-kit.htm#S3.1

    Cuando simplemente ejecuta, que ya tiene una salida:

    $ ./tiny-cgi 
    Content-type: text/html 
    
    <title>FastCGI Hello!</title><h1>FastCGI Hello!</h1>Request number 1 running on host <i>(null)</i> 
    
  3. instalar apache2 y libapache2-mod-fcgid; crear apache.conf fichero de configuración:

    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 
    

    usuario www-data es importante, ya que tiene acceso a /var/lib/apache2/fcgid/sock/, lo cual es bastante importante para fcgid (estoy corriendo en Debian, tal vez en otro lugar que será diferente). Tener DocumentRoot en el mismo directorio con el resto no es muy bueno, pero esto es solo un ejemplo rápido.

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

    Eso es -X para el modo de depuración, cuando el servidor no en demonio (no se separa), que es bastante práctico para tal juego.

  5. Vaya a http://localhost:8080/tiny-cgi, donde verá los resultados de su programa FastCGI. Si no, vea error.log.

  6. Parar Apache, instalar libapache2-mod-fastcgi, reemplace las dos líneas en la configuración con:

    LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so 
    SetHandler fastcgi-script 
    
  7. Visita http://localhost:8080/tiny-cgi nuevo.

+0

cuando intento ejecutar 'sudo/usr/sbin/apache2 -d. -f apache.conf -X 'comando, me sale el siguiente error. 'AH00534: apache2: Error de configuración: no hay MPM cargado'. ¿Por qué? –

3

Aquí hay un ejemplo de mi PC devolvente en el hogar. Es un servicio web C++ que se ejecuta en 127.0.0.1:90 que estoy probando/depurando. El "FcgidIOTimeout" está configurado en 3600, por lo que mod_fcgid no aguardará el tiempo de espera esperando una respuesta mientras paso por el proceso fcgi con gdb (el depurador). Si se agota el tiempo durante la depuración, la aplicación fcgi será eliminada. Un poco más abajo hay un scriptAlias ​​y un directorio que le dice a Apache dónde está la carpeta cgi ... "/ home/dgnorton/prj/dfi/build/src /" ... que es la carpeta de salida de compilación para mi proyecto. También deberá verificar los permisos de ese directorio.

Solo uso esto en mi sistema de inicio para la depuración. Lee los documentos Apache y mod_fcgid antes de usar esto en la naturaleza.

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> 
Cuestiones relacionadas