2010-09-23 18 views
9

C++ ile bir program yazdım ve gcc ile derledim (fastcgi.com'daki örnekte olduğu gibi) ama localhost'ta nasıl çalıştırılacağını bilmiyorum.ap ++ ve fastCGI'leri C++ uygulamamı nasıl çalıştıracağım

Aradığım her yerde, C++ için çalışmayan mod_fcgi için php yapılandırmasını buldum.

C++ web uygulaması çalıştırmak için herhangi bir gövde yapılandırılmış apache ve mod_fcgi yapar ???

+0

Kaynağınızı, yapılandırma dosyalarını ve programınızı nasıl çalıştırmayı denediğinizi kaydeder misiniz? Bu bilgi olmadan çok kafa karıştırıcı ve cevaplanması zor bir soru. 'Sudo/usr/sbin/apache2 -d' yi çalıştırmaya çalıştığımda –

cevap

9

mod_fcgi? Sadece mod_fastcgi ve mod_fcgid'i buldum. Apache yapılandırması her ikisi için oldukça basit görünüyor. FastCGI örneği derlemek ve bu hizmet için bir minimalist Apache örneğini oluşturmak Sağlar:

  1. libfcgi-dev

  2. yerde geçici bir dizin oluşturun ve sadece çalıştırdığınızda https://opensource.apple.com/source/FastCGI/FastCGI-4/fcgi/doc/fcgi-devel-kit.htm#S3.1

    örneği derlemek yükleyin zaten bazı çıkışı:

    $ ./tiny-cgi 
    Content-type: text/html 
    
    <title>FastCGI Hello!</title><h1>FastCGI Hello!</h1>Request number 1 running on host <i>(null)</i> 
    
  3. apache2 ve libapache2-mod-fcgid yükleyin; Yapılandırma dosyası apache.conf oluşturun:

    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 
    

    Kullanıcı www-data önemlidir, bu fcgid için oldukça önemlidir /var/lib/apache2/fcgid/sock/ erişimi, (belki başka bir yerde de farklı olacaktır, Debian üzerinde çalıştırıyorum) sahip olduğundan. DocumentRoot ile aynı dizinde kalanlar çok iyi değil, ama bu sadece hızlı bir örnek.

  4. Run sudo /usr/sbin/apache2 -d . -f apache.conf -X-X ayıklama modunda içindir Yani

    , bu tür oyun için oldukça kullanışlı Artalanda gelmez sunucusu (ayırmak değil). FastCGI programınızdan çıktı göreceğiniz http://localhost:8080/tiny-cgi adresine gidin. Değilse, bkz. error.log.

  5. Dur Apache, libapache2-mod-fastcgi yüklemek ile konfigürasyonda iki satır değiştirin:

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

+0

. -f apache.conf -X 'komutu, aşağıdaki hatayı alıyorum. 'AH00534: apache2: Yapılandırma hatası: MPM yüklü değil'. Niye ya? –

3

Evdeki dev PC'mden bir örnek. 127.0.0.1:90 üzerinde test/hata ayıklama yaptığım bir C++ web servisi. "FcgidIOTimeout", 3600 olarak ayarlanmıştır, bu yüzden mod_fcgid, gc (fugger) ile fcgi işleminden geçerken bir yanıt beklerken zaman aşımına uğramaz. Hata ayıklama sırasında zaman aşımına uğrarsa, fcgi uygulaması öldürülecektir. Biraz daha aşağıda bir ScriptAlias ​​ve bir Apache'ye, cgi klasörünün, projem için derleme çıktısı klasörü olan .../home/dgnorton/prj/dfi/build/src/... olduğunu söyleyen bir dizin var. Ayrıca, bu dizinin izinlerini de kontrol etmeniz gerekir.

Sadece hata ayıklama amacıyla ev sistemimde kullanıyorum. Bunlardan herhangi birini kullanmadan önce Apache ve mod_fcgid belgelerini okuyun.

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> 
İlgili konular