2010-09-23 9 views
9

Ich habe ein Programm mit C++ geschrieben und kompiliert es mit gcc (wie das Beispiel in fastcgi.com), aber ich weiß nicht, wie es auf localhost ausgeführt wird.wie apache2 und fastCGI zu konfigurieren, um meine C++ Anwendung zu starten

überall, wo ich suchte, fand ich die PHP-Konfiguration für mod_fcgi, die für C++ funktioniert nicht.

konfiguriert irgendeinen Körper Apache und mod_fcgi, um eine C++ Webanwendung zu laufen ???

+0

Können Sie Ihre Quelle, Konfigurationsdateien und wie Sie versucht haben, Ihr Programm zu starten? Dies ist eine sehr verwirrende und schwer zu beantwortende Frage ohne diese Information. –

Antwort

9

mod_fcgi? Ich habe nur mod_fastcgi und mod_fcgid gefunden. Apache-Konfiguration sieht für beide ziemlich einfach aus. Lets FastCGI Beispiel kompilieren und eine minimalistische Apache-Instanz erstellen dienen:

  1. installieren libfcgi-dev

  2. irgendwo temporäres Verzeichnis erstellen und das Beispiel von https://opensource.apple.com/source/FastCGI/FastCGI-4/fcgi/doc/fcgi-devel-kit.htm#S3.1

    kompilieren Wenn Sie es einfach laufen, es ist bereits eine Ausgabe:

    $ ./tiny-cgi 
    Content-type: text/html 
    
    <title>FastCGI Hello!</title><h1>FastCGI Hello!</h1>Request number 1 running on host <i>(null)</i> 
    
  3. Installieren apache2 und libapache2-mod-fcgid; erstellen Konfigurationsdatei 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 
    

    Benutzer www-data ist wichtig, weil es den Zugang zu /var/lib/apache2/fcgid/sock/ hat, die für fcgid ziemlich wichtig ist (ich auf Debian leite, vielleicht woanders wird es anders sein). DocumentRoot im gleichen Verzeichnis mit dem Rest zu haben ist nicht sehr gut, aber das ist nur ein kurzes Beispiel.

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

    Das -X für Debug-Modus ist, wenn der Server daemonize nicht (abzulösen nicht), die für eine solche Spiel ziemlich praktisch ist.

  5. Gehen Sie zu http://localhost:8080/tiny-cgi, wo Sie die Ausgabe Ihres FastCGI-Programms sehen. Wenn nicht, siehe error.log.

    LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so 
    SetHandler fastcgi-script 
    
  6. Besuchen http://localhost:8080/tiny-cgi wieder:

  7. Stop-Apache, libapache2-mod-fastcgi, ersetzen die beiden Linien in der Konfiguration mit installieren.

+0

wenn ich versuche 'sudo/usr/sbin/apache2 -d auszuführen. -f apache.conf -X 'Befehl, ich bekomme den folgenden Fehler. 'AH00534: apache2: Konfigurationsfehler: Kein MPM geladen'. Warum? –

3

Hier ist ein Beispiel von meinem dev PC zu Hause. Es ist ein C++ Web-Service, der unter 127.0.0.1:90 ausgeführt wird. Ich teste/debugge. Das "FcgidIOTimeout" ist auf 3600 gesetzt, so dass mod_fcgid nicht auf eine Antwort wartet, während ich den fcgi-Prozess mit gdb (dem Debugger) durchtrete. Wenn beim Debuggen eine Zeitüberschreitung auftritt, wird die fcgi-App gelöscht. Ein wenig weiter unten gibt es ein ScriptAlias ​​und ein Verzeichnis, das Apache mitteilt, wo der CGI-Ordner ... "/ home/dgnorton/prj/dfi/build/src /" ... ist, was der Build-Ausgabeordner für mein Projekt ist. Sie müssen auch die Berechtigungen dieses Verzeichnisses überprüfen.

Ich verwende dies nur auf meinem Home-System zum Debuggen. Lesen Sie die Apache- und mod_fcgid-Dokumentation, bevor Sie diese in freier Wildbahn verwenden.

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>