10 votes

Comment configurer apache2 et fastCGI pour exécuter mon application c++ ?

J'ai écrit un programme avec c++ et l'ai compilé avec gcc (comme l'exemple dans le fastcgi.com) mais je ne sais pas comment l'exécuter sur localhost.

Partout où j'ai cherché, j'ai trouvé la configuration php pour le mod_fcgi qui ne fonctionne pas. pour c++.

quelqu'un a-t-il configuré apache et mod_fcgi pour exécuter une application web en c++ ?

11voto

Messa Points 5988

Mod_fcgi ? Je n'ai trouvé que mod_fastcgi et mod_fcgid. La configuration d'Apache semble assez simple pour les deux. Compilons l'exemple FastCGI et créons une instance Apache minimaliste pour le servir :

  1. Installer libfcgi-dev

  2. Créer un répertoire temporaire quelque part et compiler l'exemple à partir de https://opensource.apple.com/source/FastCGI/FastCGI-4/fcgi/doc/fcgi-devel-kit.htm#S3.1

    Lorsque vous l'exécutez simplement, il a déjà des résultats :

    $ ./tiny-cgi 
    Content-type: text/html
    
    <title>FastCGI Hello!</title><h1>FastCGI Hello!</h1>Request number 1 running on host <i>(null)</i>
  3. Installer apache2 et libapache2-mod-fcgid ; créer le fichier de configuration 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

    L'utilisateur www-data est important, car il a accès à /var/lib/apache2/fcgid/sock/ ce qui est assez important pour fcgid (je fonctionne sous Debian, peut-être que c'est différent ailleurs). Avoir DocumentRoot dans le même répertoire que le reste n'est pas très bon, mais c'est juste un exemple rapide.

  4. Exécuter sudo /usr/sbin/apache2 -d . -f apache.conf -X

    Ce -X est pour le mode débogage, lorsque le serveur ne se démonétise pas (ne se détache pas), ce qui est assez pratique pour ce genre de jeu.

  5. Ir a http://localhost:8080/tiny-cgi où vous verrez la sortie de votre programme FastCGI. Si ce n'est pas le cas, consultez error.log .

  6. Arrêtez Apache, installez libapache2-mod-fastcgi, remplacez les deux lignes de la configuration par :

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

3voto

dgnorton Points 1459

Voici un exemple tiré de mon PC de développement à la maison. Il s'agit d'un service web C++ fonctionnant sur 127.0.0.1:90 que je teste/débogue. Le paramètre "FcgidIOTimeout" est fixé à 3600 pour que mod_fcgid ne se mette pas en attente d'une réponse pendant que je parcours le processus fcgi avec gdb (le débogueur). Si le temps d'attente est dépassé pendant le débogage, l'application fcgi sera tuée. Un peu plus bas, il y a un ScriptAlias et un Directory indiquant à Apache où se trouve le dossier cgi... "/home/dgnorton/prj/dfi/build/src/"... qui est le dossier de sortie de la compilation pour mon projet. Vous devrez également vérifier les permissions de ce répertoire.

Je ne l'utilise que sur mon système personnel pour le débogage. Lisez les docs Apache et mod_fcgid avant d'utiliser tout ceci dans la nature.

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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X