2010-09-23 4 views
9

Я написал программу с C++ и скомпилировал ее с помощью gcc (например, образец на fastcgi.com), но я не знаю, как запустить его на localhost.Как настроить apache2 и fastCGI для запуска моего приложения C++

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

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

+0

Можете ли вы опубликовать исходные файлы, файлы конфигурации и как вы пытались запустить свою программу? Это очень запутанный и трудно ответить на вопрос без этой информации. –

ответ

9

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-мод-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. Run sudo /usr/sbin/apache2 -d . -f apache.conf -X

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

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

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

    LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so 
    SetHandler fastcgi-script 
    
  7. Визит http://localhost:8080/tiny-cgi снова.

+0

, когда я пытаюсь запустить 'sudo/usr/sbin/apache2 -d. -f apache.conf -X ', я получаю следующую ошибку. 'AH00534: apache2: Ошибка конфигурации: нет загруженного MPM'. Зачем? –

3

Вот пример с моего компьютера-разработчика на дому. Это веб-служба C++, работающая на 127.0.0.1:90, которую я тестирую/отлаживаю. Значение «FcgidIOTimeout» установлено равным 3600, поэтому mod_fcgid не будет ожидать ожидания ответа, когда я пройду процесс fcgi с помощью gdb (отладчика). Если время отладки будет отложено, приложение fcgi будет убито. Еще немного внизу есть ScriptAlias ​​и Directory, сообщающие 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> 
Смежные вопросы