PHP 대신 Nginx에서 FastCGI와 C를 사용하는 이유는 무엇입니까?

PHP 대신 Nginx에서 FastCGI와 C를 사용하는 이유는 무엇입니까?

Nginx가 URL에 대한 요청을 받을 때마다 (컴파일된) C 프로그램을 실행하고 싶습니다.https://myserver.com/programs/my-C-file.

더 구체적으로 말하면, GitHub의 PR이 병합될 때 C로 작성된 사용자 지정 빌드 및 릴리스 프로세스를 시작하는 후크가 필요합니다. (빌드 프로세스가 복잡하기 때문에 C를 사용하고 싶습니다. 단계가 많고 stdout을 구문 분석하는 것이 더 쉽습니다. Bash나 PHP보다 C에서요.)

하지만 PHP 파일 대신 C 바이너리를 직접 트리거하기 위해 FastCGI를 사용해야 하는 이유가 있나요 exec('my C program')?

분명히 며칠에 한 번씩 이러한 항목을 몇 개 이상 얻지 못하므로 확장에 대해 걱정하지 않으며 FastCGI는 추가 구성이 많은 것 같지만 PHP는 즉시 사용할 수 있습니다. PHP 파일을 실행 exec()하고 Nginx에서 블록을 생성하기만 하면 됩니다.

아니면 이 모든 과정이 잘못되었다고 생각하고 더 쉽게 할 수 있는 방법이 있을 수도 있습니다.

답변1

예, nginx와 FastCGI를 사용하여 C 바이너리를 실행할 수 있습니다. 필요한 단계에 대한 대략적인 개요는 다음과 같습니다.

  • nginx 설치
  • 스폰-fcgi 설치
  • fastcgi 데이터베이스 설치(선택 사항)
  • IP/도메인을 수신하는 서버와 FCGI 업스트림을 로컬 호스트/포트로 보내는 위치를 사용하여 nginx 가상 호스트 구성을 만듭니다.
  • C 프로그램을 컴파일하십시오(프로그램에는 가 포함되어야 함 while (FCGI_Accept() >= 0) { }).
  • 귀하의 프로그램에 대한 래퍼로 localhost/port를 수신하기 위해spawn-fcgi 프로세스를 시작하십시오.

더 읽어볼 내용:

NGINX를 사용하여 C FastCGI 스크립트 실행

[소개글] Nginx + FastCGI 프로그램(C/C++) Demo 및 구축 배포

답변2

두 가지 가능한 솔루션:

  1. Python의 CGIHTTPServer를 사용하십시오. 구성할 필요가 없습니다. 컴파일된 프로그램을 디렉토리에 넣고 상위 디렉토리에서 cgi-bin시작하면 됩니다 . python -m CGIHTTPServerpath 에서 프로그램을 호출할 수 있습니다 /cgi-bin/yourprogramname. 이것은 이미 작동 중인 HTTP 서버입니다. Nginx를 앞에 두고 싶다면 간단한 역방향 프록시로 구성하세요(proxy_pass이면 충분합니다).

  2. Apache의 기본 CGI 지원을 사용하십시오. 나는 당신에게 참고할 것입니다아파치의 문서구성의 경우 디렉터리 구조는 첫 번째 옵션과 동일합니다.

C가 아닌 Go와 같은 언어를 사용하면 이동 조각의 양을 줄일 수도 있습니다. 실제 빌드 프로세스를 실행하는 함수를 호출할 수 있는 10줄 정도의 Go에서 HTTP 서버를 작성할 수 있기 때문입니다.

관련 정보