2013-08-06 3 views
-1

Nginx에서 C로 요청을 처리하려면 어떻게해야합니까?Nginx에서 C로 HTTP 요청 처리

이 목적에 필요한 예제, 소스 코드 또는 문서 및 구성을 제공하면 좋을 것입니다.

답변

2

컴파일 된 바이너리 파일을 nginx로 제공하려면 FCGI라는 다른 서버를 실행하고 서비스 할 각 바이너리의 경로를 말한 다음 해당 서버에 대한 프록시 연결로 nginx를 구성해야합니다.

예 구성 :

http 
{ 
    server 
    { 
    listen 80; 
    server_name localhost; 

    location/
    { 
     fastcgi_pass 127.0.0.1:8000; 

     fastcgi_param GATEWAY_INTERFACE CGI/1.1; 
     fastcgi_param SERVER_SOFTWARE nginx; 
     fastcgi_param QUERY_STRING  $query_string; 
     fastcgi_param REQUEST_METHOD  $request_method; 
     fastcgi_param CONTENT_TYPE  $content_type; 
     fastcgi_param CONTENT_LENGTH  $content_length; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     fastcgi_param SCRIPT_NAME  $fastcgi_script_name; 
     fastcgi_param REQUEST_URI  $request_uri; 
     fastcgi_param DOCUMENT_URI  $document_uri; 
     fastcgi_param DOCUMENT_ROOT  $document_root; 
     fastcgi_param SERVER_PROTOCOL $server_protocol; 
     fastcgi_param REMOTE_ADDR  $remote_addr; 
     fastcgi_param REMOTE_PORT  $remote_port; 
     fastcgi_param SERVER_ADDR  $server_addr; 
     fastcgi_param SERVER_PORT  $server_port; 
     fastcgi_param SERVER_NAME  $server_name; 
    } 
    } 
} 

당신은 말할 FCGI 당신과 같이 제공하고자하는 바이너리 : 요청이 성공적으로 바이너리로 리디렉션되면

spawnfcgi -a 127.0.0.1 -p 8000 -f /path/to/binary 

, 간단한 인사 세계가 같이 기록 될 수 있습니다 그래서 :

#include <stdio.h> 

int main (int argc, char **argv) 
{ 
    printf ("Content-type: text/html\r\n\r\n"); 
    printf ("<h1>Hello, world!</h1>"); 
    return 0; 
} 

각각 GET과 POST 데이터를 처리하기 위해, 당신은 파를해야합니다 환경 변수 QUERY_STRING 및 표준 입력에서 각각 찾습니다. POST 데이터의 길이는 환경 변수로 지정됩니다. 예 :

printf ("My GET data is: %s<br>", getenv ("QUERY_STRING")); 

int len = atoi (getenv (CONTENT_LENGTH)); 
char *buf = malloc (len + 1); 
read (0, buf, len); 
buf[len] = 0; 

printf ("My POST data is: %s<br>", buf); 

제 생각에는 nginx가 CGI를 처리하기위한 최적의 선택이 아닙니다. lighttpd을 살펴보십시오.

+0

고맙습니다. 귀하의 의견은 매우 유용합니다 !! – Hernan