spawn-fcgi и C++

I3
На сайте с 29.07.2014
Offline
0
1491

Здравствуйте. Я пытаюсь связать nginx и spawn-fcgi, чтобы на последнем работала простенькая программа из доков. Она имеет следующий вид:

#include "fcgi_stdio.h"

#include <stdlib.h>

int main()

{

int count = 0;

while(FCGI_Accept() >= 0)

printf("Content-type: text/html\r\n"

"\r\n"

"<title>FastCGI Hello!</title>"

"<h1>FastCGI Hello!</h1>"

"Request number %d running on host <i>%s</i>\n",

++count, getenv("SERVER_NAME"));

}

Компилирую. помещаю в нужную папку. Ставлю права и получаю ошибку 502. В логах ошибка выглядит так:

2014/07/29 10:40:04 [error] 1106#0: *35 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /tester/ HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost"

Не могу понять, что я делаю нетак. Буду очень признателен, если кто-нибудь наставит на путь истинный=)

Также показываю кусок из конфига nginx:

location /tester {

fastcgi_pass 127.0.0.1:9000;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param QUERY_STRING $query_string;

}

N
На сайте с 06.05.2007
Offline
419
#1

imvan32, не вижу этапа "запускаю демон spawn-fcgi". он запущен? а почему тогда connection refused ?

Кнопка вызова админа ()
I3
На сайте с 29.07.2014
Offline
0
#2

Да, я забыл упомянуть етот момент. С етим тоже возникает проблема.

sudo spawn-fcgi -a 127.0.0.1 -p 9000 -f /var/www/test/cgi-bin/hello2 -F 2

spawn-fcgi: child exited with: 0

spawn-fcgi: child spawned successfully: PID: 7944.

У второго файл пида появляется, но он пустой. Если указывать одного ребенка, то будет просто spawn-fcgi: child exited with: 0.

У меня стоит ubuntu 14

I3
На сайте с 29.07.2014
Offline
0
#3

Может кто-нибудь подсказать?

Andreyka
На сайте с 19.02.2005
Offline
822
#4

Проверьте - слушает ли ваш демон этот порт

Не стоит плодить сущности без необходимости
W
На сайте с 07.07.2014
Offline
1
#5

нужно добавить в настройки location

fastcgi_param SERVER_NAME $server_name;

или выкинуть из кода getenv("SERVER_NAME")

при текущих настройках getenv("SERVER_NAME") дает NULL, при передаче которого в printf получается segfault

Boris A Dolgov
На сайте с 04.07.2007
Offline
215
#6
webnetd:
нужно добавить в настройки location

fastcgi_param SERVER_NAME $server_name;
или выкинуть из кода getenv("SERVER_NAME")

при текущих настройках getenv("SERVER_NAME") дает NULL, при передаче которого в printf получается segfault

Хорошая идея, но libfcgi/fcgiapp.c:

 594                 case 's':
595 charPtrArg = va_arg(arg, char *);
596 if (!charPtrArg) charPtrArg = "(null)";

В первую очередь, мне кажется, надо решать проблему с "spawn-fcgi: child exited with: 0", так как это неправильно и программа должна запускаться и работать и с 1 потоком. Но я сходу не могу придумать, откуда такая ошибка.

А для написания всякого такого на си/си++ удобно использовать scgi. Описание протокола занимает 2 страницы, реализация (если писать не на голых сокетах, а на libevent/asio/qt) -- еще столько же.

В libevent тоже есть http-сервер.

С уважением, Борис Долгов. Администрирование, дешевые лицензии ISPsystem, Parallels, cPanel, DirectAdmin, скины, SSL - ISPlicense.ru (http://www.isplicense.ru/?from=4926)
I3
На сайте с 29.07.2014
Offline
0
#7

Хотелось бы все же разобраться с spawn-fcgi. Порт никто не слушает. Гуглил ошибку "spawn-fcgi: child exited with: 0

", но результатов это никаких не дало.

webnetd:
нужно добавить в настройки location

fastcgi_param SERVER_NAME $server_name;
или выкинуть из кода getenv("SERVER_NAME")

при текущих настройках getenv("SERVER_NAME") дает NULL, при передаче которого в printf получается segfault

Это действительно не помогло=)

Может нужно какие-то конфиги править в самом spawn-fcgi?

I3
На сайте с 29.07.2014
Offline
0
#8

Попробывал другую программу на С++ из доков. Она нормально отработала. Странно как-то)

Andreyka
На сайте с 19.02.2005
Offline
822
#9

В 13 лет это нормально.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий