Быстрый старт - lmovsesjan/Fastcgi-Daemon GitHub Wiki
В этом разделе будет рассмотрена установка FastCGI-демона в связке с nginx. Также будет разработан модуль обработки запроса и описан способ его подключения к демону.
Установим nginx командой:
$ sudo apt-get install nginx
Конфигурационный файл, который будет направлять запросы ко всем ресурсам сервера в FastCGI-демон, будет выглядеть следующим образом:
$ cat /etc/nginx/sites-enabled/fastcgi-daemon.conf
server {
listen 80;
location / {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
fastcgi_pass unix:/tmp/fastcgi_daemon.sock;
}
}
fastcgi_pass
должен указывать на тот же сокет, который будет использоваться FastCGI-демоном.
Перезапустим NGINX командой:
$ service nginx restart
Для установки FastCGI-демона воспользуемся командой:
$ sudo apt-get install fastcgi-daemon2-init libfastcgi-daemon2-dev libfastcgi2-syslog
Пусть компонент (<component>
), который будет разработан далее, называется csimple
, а размещаться он будет в модуле (<module>
) csimple_module
, который в свою очередь будет находиться в библиотеке libcsimple.so
. Пусть также этот компонент будет обработчиком (<handler>
) запросов, направляемых к ресурсу /csimple_res
. Компонент будет реализован классом SimpleClass
, который будет предоставляться демону как фабрика simple_factory
. В этом случае конфигурационный файл FastCGI-демона будет выглядеть следующим образом:
<?xml version="1.0"?>
<fastcgi xmlns:xi="http://www.w3.org/2001/XInclude">
<pools>
<pool name="main" threads="1" queue="1"/>
</pools>
<handlers>
<handler pool="main" url="/simple_res">
<component name="csimple"/>
</handler>
</handlers>
<components>
<component name="csimple" type="csimple_module:simple_factory"/>
<component name="daemon-logger" type="logger:logger">
<level>INFO</level>
<ident>fastcgi-test</ident>
</component>
</components>
<modules>
<module name="csimple_module" path="/fastcgi/csimple/libcsimple.so"/>
<module name="logger" path="/usr/lib/fastcgi2/fastcgi2-syslog.so"/>
</modules>
<daemon>
<logger component="daemon-logger"/>
<endpoint>
<backlog>128</backlog>
<socket>/tmp/fastcgi_daemon.sock</socket>
<threads>1</threads>
</endpoint>
<pidfile>/tmp/fastcgi_daemon.pid</pidfile>
<monitor_port>20011</monitor_port>
</daemon>
</fastcgi>
Модуль logger
(компонент daemon-logger
) необходим для логгирования и подключается всегда.
Сохраним этот конфигурационный файл как csimple.conf
.
Пусть приложение на любой запрос отвечает пакетом с заголовком Simple-Header
. Код этого обработчика будет выглядеть следующим образом:
#include <fastcgi2/component.h>
#include <fastcgi2/component_factory.h>
#include <fastcgi2/handler.h>
#include <fastcgi2/request.h>
#include <iostream>
class SimpleClass : virtual public fastcgi::Component, virtual public fastcgi::Handler {
public:
SimpleClass(fastcgi::ComponentContext *context) :
fastcgi::Component(context) {
}
virtual ~SimpleClass() {
}
public:
virtual void onLoad() {
}
virtual void onUnload() {
}
virtual void handleRequest(fastcgi::Request *request, fastcgi::HandlerContext *context) {
//Здесь размещается код обработки запроса
request->setHeader("Simple-Header", "Reply from csimple");
}
};
FCGIDAEMON_REGISTER_FACTORIES_BEGIN()
FCGIDAEMON_ADD_DEFAULT_FACTORY("simple_factory", SimpleClass)
FCGIDAEMON_REGISTER_FACTORIES_END()
Сохраним в файле SimpleClass.cpp
и скомпилируем:
$ g++ SimpleClass.cpp -fPIC -lfastcgi-daemon2 -shared -o libcsimple.so
Разместим libcsimple.so
в каталоге /fastcgi/csimple
И запустим FastCGI-Daemon командой:
$ fastcgi-daemon2 --config=csimple.conf
Проверим работоспособность примера:
$ curl -v "http://localhost/simple_res"
> GET /simple_res HTTP/1.1
> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: localhost
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.2.1
< Date: Wed, 28 Nov 2012 07:02:04 GMT
< Transfer-Encoding: chunked
< Connection: keep-alive
< Simple-Header: Reply from csimple
В ответе присутствует заголовок "Simple-Header: Reply from csimple", который говорит об успешности проверки.