Skip to content
mobius1qwe edited this page Nov 6, 2026 · 1 revision

Home > Colocar no ar > FastCGI 🚧

FastCGI: o RAL atrás do nginx ou do Apache

Important

Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.

Vale para a 2.0 · Delphi XE em diante e Lazarus/FPC 3.2 em diante · Nível: intermediário

Em uma frase: o TRALFastCGIServer é um motor que fala FastCGI em vez de HTTP: o servidor web (nginx, Apache) cuida do HTTPS, dos arquivos e do HTTP/2, e passa os pedidos da API para o seu programa, que fica vivo entre um pedido e outro (ao contrário do CGI).

Você vai precisar: os pacotes FastCGIRAL e RALNetPackage. O protocolo é do próprio RAL, o mesmo no Delphi e no Lazarus.

uses RALFastCGIServer;

Servidor := TRALFastCGIServer.Create(Self);
Servidor.Port := 9000;
Servidor.CreateRoute('api/clientes', Clientes);
Servidor.Active := True;

nginx

location /api/ {
  include fastcgi_params;
  fastcgi_param REQUEST_URI $request_uri;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_keep_conn on;      # a mesma conexão para vários pedidos
  fastcgi_buffering off;     # resposta em fluxo chega ao vivo
}

Apache 2.4

ProxyPass "/api/" "fcgi://127.0.0.1:9000/api/" enablereuse=on

IIS

O FastCGI do IIS só conversa com processos que ele mesmo inicia, por pipe, não com uma porta TCP. No IIS prefira a ISAPI, ou o RAL num motor HTTP atrás do ARR.

O que o motor faz

  • o caminho vem de REQUEST_URI (ou SCRIPT_NAME + PATH_INFO + QUERY_STRING), os cabeçalhos de HTTP_*, o IP de REMOTE_ADDR, HTTPS de HTTPS=on;
  • FCGI_KEEP_CONN: a conexão fica aberta para o próximo pedido; sem ele, fecha ao fim do pedido;
  • resposta em fluxo ao vivo (Send, SendEvent);
  • ABORT_REQUEST cancela um pedido cujo corpo ainda não chegou todo;
  • MaxConnections limita as conexões do servidor web; ReadTimeout é quanto uma conexão pode ficar calada no meio de um pedido.

Só TCP por enquanto (o socket Unix fica para depois). Um pedido por vez em cada conexão (FCGI_MPXS_CONNS = 0): o nginx abre mais conexões quando precisa.

Veja também

Clone this wiki locally