Por que FastCGI e C no Nginx em vez de PHP?

Por que FastCGI e C no Nginx em vez de PHP?

Quero executar um programa C (compilado) sempre que o Nginx receber uma solicitação de URL, digamoshttps://myserver.com/programs/my-C-file.

Mais especificamente, quando um PR no GitHub é mesclado, quero um gancho para iniciar um processo personalizado de construção e lançamento escrito em C (quero usar C porque o processo de construção é complexo. Existem muitas etapas e é mais fácil analisar stdout em C do que Bash ou PHP.)

Mas há algum motivo para eu usar FastCGI para acionar o binário C diretamente em vez de um arquivo PHP e exec('my C program')?

Obviamente, não estou recebendo mais do que alguns deles a cada poucos dias, então não estou preocupado com o aumento de escala, e parece que o FastCGI é uma configuração extra, enquanto o PHP posso usar imediatamente. Basta criar um arquivo PHP executado exec()e criar um bloco no Nginx.

Ou talvez eu esteja pensando errado em todo esse processo e haja uma maneira mais fácil de fazer isso.

Responder1

Sim, é possível usar nginx e FastCGI para executar seu binário C. Aqui está uma visão geral aproximada das etapas necessárias:

  • Instale o nginx
  • Instale spawn-fcgi
  • Instale o banco de dados fastcgi (opcional)
  • Crie a configuração do nginx vhost com um servidor que escuta seu IP/domínio e um local que envia um upstream FCGI para localhost/porta.
  • Compile seu programa C (seu programa deve incluir while (FCGI_Accept() >= 0) { })
  • Inicie o processo spawn-fcgi para escutar em localhost/port como wrapper para seu programa.

Mais para ler:

Executando um script C FastCGI usando NGINX

[artigo de introdução] Programa Nginx + FastCGI (C/C++) Demo e implantado para construção

Responder2

Duas soluções possíveis:

  1. Use o CGIHTTPServer do Python. Sem configuração, basta colocar seu programa compilado em um cgi-bindiretório e iniciar python -m CGIHTTPServerno diretório pai. Você pode chamar seu programa em path /cgi-bin/yourprogramname. Este já é um servidor HTTP funcional, se você ainda quiser o Nginx na frente dele, configure-o para um proxy reverso simples (proxy_pass deve ser suficiente).

  2. Use o suporte CGI nativo do Apache. vou te indicarDocumentação do Apachepara configuração, a estrutura de diretórios é equivalente à primeira opção.

Você também pode reduzir a quantidade de peças móveis não usando C, mas uma linguagem como Go, porque você pode escrever um servidor HTTP em Go em 10 linhas que pode chamar uma função para executar o processo de construção real.

informação relacionada