2010-09-23 12 views
9

Napisałem program z C++ i skompilowałem go z gcc (jak przykład w fastcgi.com), ale nie wiem jak uruchomić go na localhost.jak skonfigurować apache2 i fastCGI do uruchomienia mojej aplikacji C++

wszędzie, gdzie szukałem, znalazłem konfigurację php dla mod_fcgi, która nie będzie działać dla C++.

czy każdy organ skonfigurował apache i mod_fcgi do uruchomienia aplikacji sieciowej w języku C++?

+0

Czy możesz opublikować swoje źródło, pliki konfiguracyjne i sposób próby uruchomienia programu? Jest to bardzo mylące i trudne do odpowiedzi pytanie bez tych informacji. –

Odpowiedz

9

mod_fcgi? Znalazłem tylko mod_fastcgi i mod_fcgid. Konfiguracja Apache wygląda dość prosto dla obu. Pozwala skompilować przykład FastCGI i stworzyć minimalistyczny instancję Apache jej służyć:

  1. Install libfcgi-dev

  2. Tworzenie katalogu tymczasowego gdzieś i skompilować przykład z https://opensource.apple.com/source/FastCGI/FastCGI-4/fcgi/doc/fcgi-devel-kit.htm#S3.1

    Po prostu uruchom go, ma już pewne wyjście:

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

    użytkownika www-data jest ważna, ponieważ ma dostęp do /var/lib/apache2/fcgid/sock/, co jest bardzo ważne dla fcgid (używam na Debianie, może gdzieś indziej będzie inaczej). Posiadanie DocumentRoot w tym samym katalogu z resztą nie jest zbyt dobre, ale to tylko szybki przykład.

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

    To -X jest w trybie debugowania, gdy serwer nie daemonize (nie odłączyć), który jest całkiem przydatny dla takiego grania.

  5. Przejdź do http://localhost:8080/tiny-cgi, gdzie zobaczysz dane wyjściowe z twojego programu FastCGI. Jeśli nie, zobacz error.log. ponownie

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

  7. Zatrzymaj Apache zainstalować libapache2-mod-FastCGI wymienić dwie linie w konfiguracji z.

+0

, gdy próbuję uruchomić "sudo/usr/sbin/apache2 -d. -f polecenie apache.conf -X ', pojawia się następujący błąd. "AH00534: apache2: Błąd konfiguracji: brak załadowanego MPM". Czemu? –

3

Oto przykład z mojego komputera PC w domu. Jest to usługa sieciowa C++ uruchomiona na 127.0.0.1:90, którą testuję/debuguję. "FcgidIOTimeout" jest ustawione na 3600, więc mod_fcgid nie będzie czekać na odpowiedź, kiedy przechodzę przez proces fcgi z gdb (debugger). Jeśli przekroczy limit czasu podczas debugowania, aplikacja fcgi zostanie zabita. Nieco dalej znajduje się ScriptAlias ​​i katalog informujący Apache, gdzie folder cgi to ... "/ home/dgnorton/prj/dfi/build/src /" ... który jest folderem wyjściowym dla mojego projektu. Musisz także sprawdzić uprawnienia tego katalogu.

Używam tylko tego w moim systemie domowym do debugowania. Przeczytaj dokumentację Apache i mod_fcgid, zanim zaczniesz korzystać z tego na wolności.

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> 
Powiązane problemy