The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
nginx + FastCGI/C, !*! aantipov, 29-Июн-11, 18:01  [смотреть все]
Господа!

Нужна помощь: надо настроить связку nginx+FastCGI/C.

Имеется: виртуальная машина FreeBSD 8.0 (64 bit). На ней установлен (все п/о установлено из портов) и настроен nginx-0.8.54. Пытаюсь прикрутить к нему свой бинарный модуль FastCGI. Для этого:
1. Поставил из портов fcgi-devkit-2.4.0.
2. На сайте http://www.fastcgi.com/devkit/doc/fastcgi-prog-guide/ch2c.ht... взял код (Example-1).
3. Откомпилил и собрал указанный код, бинарник по виндовой привычке назвал tiny1.exe
4. Поставил из портов spawn-fcgi-1.6.3.
5. Запустил tiny1.exe вот таким образом:
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9110 -P ./9110.pid tiny1.exe
6. Внес в nginx.conf такой текст в раздел нужного виртуального сервера:
location ~ tiny1\.exe$ {
             fastcgi_pass   127.0.0.1:9110;
         }
7. Рестартовал nginx

Однако получился облом - при обращении к урлу http://myserver/tiny1.exe получаю ошибку 502 bad gateway и процесс мой падает в дамп.

Пытаюсь понять, где у меня ошибка. Вроде делаю все по мануалам. Рядом стоит и прекрасно работает php/fpm, установленный по мануалам. А тут вроде бы все элементарно, но не выходит каменный цветок.

Буду весьма благодарен за дельные советы.

  • nginx + FastCGI/C, !*! aantipov, 19:08 , 29-Июн-11 (1)
    > Нужна помощь: надо настроить связку nginx+FastCGI/C.

    Разобрался сам. Вот этот код не работал:

    #include "fcgi_stdio.h" /* fcgi library; put it first*/
    #include <stdlib.h>
    int count;
    void initialize(void)
    {
      count=0;
    }

    void main(void)
    {
    /* Initialization. */  
      initialize();

    /* Response loop. */
      while (FCGI_Accept() >= 0)   {
        printf("Content-type: text/html\r\n"
               "\r\n"
               "<title>FastCGI Hello! (C, fcgi_stdio library)</title>"
               "<h1>FastCGI Hello! (C, fcgi_stdio library)</h1>"
               "Request number %d running on host <i>%s</i>\n",
                ++count, getenv("SERVER_HOSTNAME"));
      }
    }

    В нем явная дыра, которая бросается в глаза - падать может если только нет переменной окружения SERVER_HOSTNAME. В общем, пример заточен под другой сервер. Если заменить SERVER_HOSTNAME на HTTP_HOST, пример работает.

    Всем, кто помогал мне телепатически - спасибо.
    :)




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру