C язык FastCGI с Nginx
Я пытаюсь запустить приложение fastcgi, написанное на языке C за веб-сервером Nginx. Веб-браузер никогда не завершает загрузку, и ответ никогда не завершится. Я не уверен, как подойти к нему и отладки. Любое понимание будет оценено.
приложение hello world было взято из fastcgi.com и упрощенный, чтобы выглядеть так:
#include "fcgi_stdio.h"
#include <stdlib.h>
int main(void)
{
while(FCGI_Accept >= 0)
{
printf("Content-type: text/htmlrnStatus: 200 OKrnrn");
}
return 0;
}
выходной исполняемый файл выполняется с одним из:
cgi-fcgi-подключение 127.0.0.1:9000 а.из
или
spawn-fcgi-a120.0.0.1-р9000-н./а.из
конфигурация Nginx:
server {
listen 80;
server_name _;
location / {
# host and port to fastcgi server
root /home/user/www;
index index.html;
fastcgi_pass 127.0.0.1:9000;
}
}
5 ответов
нужно позвонить FCGI_Accept
на while
петли:
while(FCGI_Accept() >= 0)
вы FCGI_Accept >= 0
в коде. Я думаю, что результаты в адрес FCGI_Accept
функция сравнивается с 0
. Поскольку функция существует, сравнение никогда не бывает ложным, но функция не вызывается.
вот отличный пример nginx, ubuntu, c++ и fastcgi.
http://chriswu.me/blog/writing-hello-world-in-fcgi-with-c-plus-plus/
Если вы хотите запустить его код, я поместил его в репозиторий git с инструкциями. Вы можете проверить это и запустить его для себя. Я тестировал его только на Ubuntu.
после того, как ваше приложение правильно обрабатывает FastCGI-запросы, вам нужно позаботиться о запуске приложения. nginx никогда не будет порождать процессы fcgi, поэтому вам нужен демон, заботящийся об этом.
Я рекомендую использовать uwsgi для управления процессами fcgi. Он способен порождать рабочие процессы, которые готовы к вводу, и перезапускать их, когда они умирают. Это высоко настраиваемый и простой в установке и использовать.
http://uwsgi-docs.readthedocs.org/en/latest/
вот мой конфиг:
[uwsgi]
fastcgi-socket = /var/run/apc.sock
protocol = fastcgi
worker-exec = /home/app/src/apc.bin
spooler = /home/app/spooler/
processes = 15
enable-threads = true
master = true
chdir = /home/app/
chmod-socket = 777
это прекрасно интегрируется в качестве службы systemd, но также может работать без.
попробовать с:
$ cgi-fcgi -start -connect localhost:9000 ./hello
это работает для меня. Я использую archlinux и следую инструкциям по адресу:
вы можете попробовать это https://github.com/Taymindis/ngx-c-handler
Он построен сверху на fastcgi, он обрабатывает несколько запросов, и есть некоторые основные функции, а также. Он может отображать функции обработчика с помощью nginx.
для запуска nginx с языком c / C++ https://github.com/Taymindis/ngx-c-handler/wiki/How-to-build-a-cpp-service-as-c-service-interface