Repository navigation
iis apache
Home > Colocar no ar > IIS e Apache 🚧
Important
Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.
Vale para a 2.0 · ISAPI: Delphi XE em diante · Apache 2.4: Delphi (com
Web.HTTPD24Impl) e Lazarus/FPC 3.2 em diante · Nível: intermediário
Em uma frase: o TRALWebBrokerServer vive dentro de uma DLL que o IIS ou o Apache
carregam uma vez; o servidor RAL fica ativo enquanto ela estiver carregada.
Você vai precisar: o pacote WebBrokerRAL (no Delphi ele usa o WebBroker, pacote
inet; no Lazarus, o custapache24 do fcl-web).
library minhaapi;
uses
Winapi.ActiveX, System.Win.ComObj, Web.WebBroker, Web.Win.ISAPIApp,
Web.Win.ISAPIThreadPool, RALWebBrokerServer, uRotas;
exports
GetExtensionVersion, HttpExtensionProc, TerminateExtension;
begin
CoInitFlags := COINIT_MULTITHREADED;
Application.Initialize;
Application.WebModuleClass := TRALWebBrokerModule;
Servidor := TRALWebBrokerServer.Create(nil);
MontarRotas(Servidor);
Servidor.Active := True; // os plugins ligam aqui, uma vez
Application.Run;
end.No IIS: ISAPI and CGI Restrictions libera a DLL e um Handler Mapping ISAPI-dll
a executa. A rota é o que vem depois do nome da DLL: /api/minhaapi.dll/clientes
chega como /clientes.
library mod_minhaapi;
uses
Web.WebBroker, Web.ApacheApp, Web.HTTPD24Impl, RALWebBrokerServer, uRotas;
var
GModuleData: TApacheModuleData;
exports
GModuleData name 'minhaapi_module';
begin
Web.ApacheApp.InitApplication(@GModuleData);
Application.Initialize;
Application.WebModuleClass := TRALWebBrokerModule;
... (servidor como acima)
Application.Run;
end.LoadModule minhaapi_module modules/mod_minhaapi.dll
<Location /api>
SetHandler mod_minhaapi-handler
</Location>Antes do Delphi 13 o Apache não entrega a lista de cabeçalhos: o RAL lê os usuais
(Authorization, Cookie, Accept-*, X-Forwarded-*...); outros, ponha os nomes em
ExtraHeaders.
library ralapache;
{$MODE OBJFPC}{$H+}
uses cthreads, httpd24, RALWebBrokerServer, uRotas;
var
ral_module: module; public name 'ral_module';
exports
ral_module name 'ral_module';
begin
Servidor := TRALWebBrokerServer.Create(nil);
MontarRotas(Servidor);
Servidor.Active := True;
RALApacheStart(ral_module, 'ral_module', 'ral-handler');
end.No Linux compile com código relocável (-Cg). No httpd.conf, LoadModule ral_module /caminho/libralapache.so e SetHandler ral-handler.
| sintoma | causa |
|---|---|
| 503 "no active TRALWebBrokerServer" | o servidor não foi ativado no bloco principal da DLL |
| corpo de POST cortado | um WebBroker antigo; atualize para o RAL 2.0 (lê o resto com ReadClient) |
| cabeçalho próprio não chega (Apache, Delphi < 13) | acrescente o nome em ExtraHeaders
|
- FastCGI
- Serviço e daemon
- Exemplos:
ISAPIExample(Delphi),ApacheExample(Lazarus)
Começar
Servidor
- Rotas e parâmetros
- Rotas avançadas: tipos, grupos, versões 🚧
- Ler o pedido e responder
- Objetos no corpo 🚧
- Resposta em fluxo 🚧
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- Servidor SOAP 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
- Testes em memória 🚧
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
Cliente
Motores
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar