Как настроить Apache2 и FastCGI для запуска моего приложения C ++ - PullRequest
9 голосов
/ 23 сентября 2010

Я написал программу на c ++ и скомпилировал ее с помощью gcc (как пример на fastcgi.com), но я не знаю, как запустить ее на localhost.

везде, где я искал, я нашел phpконфигурация для mod_fcgi, которая не работает для c ++.

, настраивает ли любое тело apache и mod_fcgi для запуска веб-приложения c ++ ???

Ответы [ 2 ]

9 голосов
/ 24 сентября 2010

mod_fcgi?Я нашел только mod_fastcgi и mod_fcgid.Конфигурация Apache выглядит довольно просто для обоих.Давайте скомпилируем пример FastCGI и создадим минималистичный экземпляр Apache для его обслуживания:

  1. Установите libfcgi-dev

  2. Создайте где-нибудь временный каталог и скомпилируйте примериз https://opensource.apple.com/source/FastCGI/FastCGI-4/fcgi/doc/fcgi-devel-kit.htm#S3.1

    Когда вы просто запускаете его, он уже имеет какой-то вывод:

    $ ./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 и libapache2-mod-fcgid;создайте конфигурационный файл 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
    

    Пользовательские www-данные важны, потому что они имеют доступ к /var/lib/apache2/fcgid/sock/, что очень важно для fcgid (я работаю на Debian, возможно, где-то еще это будетбудь другим).Наличие DocumentRoot в том же каталоге, что и остальные, не очень хорошо, но это всего лишь быстрый пример.

  4. Выполнить sudo /usr/sbin/apache2 -d . -f apache.conf -X

    Это -X длярежим отладки, когда сервер не демонизируется (не отключается), что очень удобно для такой игры.

  5. Перейдите на http://localhost:8080/tiny-cgi, где вы увидите выходные данные из вашей программы FastCGI,Если нет, см. error.log.

  6. Остановите Apache, установите libapache2-mod-fastcgi, замените две строки в конфигурации на:

    LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so
    SetHandler fastcgi-script
    
  7. Посетите http://localhost:8080/tiny-cgi еще раз.

3 голосов
/ 24 сентября 2010

Вот пример с моего ПК разработчика дома. Это веб-служба C ++, работающая на 127.0.0.1:90, которую я тестирую / отлаживаю. «FcgidIOTimeout» установлен на 3600, поэтому mod_fcgid не будет превышать время ожидания ответа, пока я выполняю процесс fcgi с помощью gdb (отладчик). Если во время отладки время ожидания истекло, приложение fcgi будет убито. Чуть дальше есть ScriptAlias ​​и каталог, сообщающий Apache, где находится папка cgi ... "/ home / dgnorton / prj / dfi / build / src /" ... которая является выходной папкой для моего проекта. Вам также необходимо проверить разрешения для этого каталога.

Я использую это только в своей домашней системе для отладки. Прочитайте документы Apache и mod_fcgid перед тем, как использовать все это в дикой природе.

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>
...