{"id":271,"date":"2024-03-25T08:00:00","date_gmt":"2024-03-25T11:00:00","guid":{"rendered":"https:\/\/adrianosantostreina.com.br\/blog\/?p=271"},"modified":"2024-04-06T14:58:06","modified_gmt":"2024-04-06T17:58:06","slug":"configurando-o-nginx-para-ssl-protegendo-sua-api-horse","status":"publish","type":"post","link":"https:\/\/adrianosantostreina.com.br\/blog\/configurando-o-nginx-para-ssl-protegendo-sua-api-horse\/","title":{"rendered":"Configurando o NGINX para SSL: Protegendo sua API Horse no Linux"},"content":{"rendered":"\n<p>A seguran\u00e7a \u00e9 uma preocupa\u00e7\u00e3o primordial em qualquer aplica\u00e7\u00e3o web moderna, e uma parte crucial disso \u00e9 a implementa\u00e7\u00e3o do SSL\/TLS para criptografar a comunica\u00e7\u00e3o entre o cliente e o servidor. Neste artigo, vamos explorar como configurar o NGINX para SSL e garantir uma conex\u00e3o segura para sua API Horse rodando em um servidor Linux.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p><strong>Por que SSL \u00e9 importante?<\/strong><\/p>\n\n\n\n<p>SSL (Secure Sockets Layer) e seu sucessor, TLS (Transport Layer Security), desempenham um papel crucial na seguran\u00e7a da comunica\u00e7\u00e3o na internet. Aqui est\u00e3o alguns motivos pelos quais SSL \u00e9 t\u00e3o importante:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Criptografia de Dados<\/strong>: Uma das fun\u00e7\u00f5es mais importantes do SSL \u00e9 criptografar os dados transmitidos entre o cliente (como um navegador da web) e o servidor. Isso significa que mesmo que algu\u00e9m intercepte os dados, eles n\u00e3o ser\u00e3o leg\u00edveis sem a chave de decodifica\u00e7\u00e3o correta. Por exemplo, ao enviar informa\u00e7\u00f5es de login, como nomes de usu\u00e1rio e senhas, atrav\u00e9s de uma conex\u00e3o SSL, esses dados s\u00e3o criptografados, reduzindo significativamente o risco de que sejam interceptados por terceiros maliciosos.<\/li>\n\n\n\n<li><strong>Autentica\u00e7\u00e3o do Servidor<\/strong>: O SSL tamb\u00e9m fornece autentica\u00e7\u00e3o do servidor, garantindo que os usu\u00e1rios estejam realmente se conectando ao site desejado e n\u00e3o a uma vers\u00e3o falsificada ou maliciosa. Isso \u00e9 feito por meio de certificados digitais, emitidos por autoridades de certifica\u00e7\u00e3o confi\u00e1veis, que validam a identidade do servidor. Quando um navegador recebe um certificado v\u00e1lido, ele sabe que pode confiar na identidade do servidor e na seguran\u00e7a da conex\u00e3o.<\/li>\n\n\n\n<li><strong>Integridade dos Dados<\/strong>: Al\u00e9m de criptografar os dados, o SSL tamb\u00e9m verifica a integridade dos dados durante a transmiss\u00e3o. Isso significa que, se os dados forem modificados ou corrompidos durante a transmiss\u00e3o, o receptor ser\u00e1 capaz de detectar isso e rejeitar os dados comprometidos. Isso \u00e9 fundamental para garantir que as informa\u00e7\u00f5es transmitidas n\u00e3o sejam alteradas ou corrompidas por terceiros.<\/li>\n\n\n\n<li><strong>Conformidade com Regulamenta\u00e7\u00f5es de Seguran\u00e7a<\/strong>: Em muitos setores, como o financeiro e o de sa\u00fade, existem regulamenta\u00e7\u00f5es rigorosas de seguran\u00e7a de dados que exigem o uso de SSL para proteger informa\u00e7\u00f5es sens\u00edveis dos clientes. Ademais, muitos navegadores modernos tamb\u00e9m alertam os usu\u00e1rios quando est\u00e3o acessando sites que n\u00e3o utilizam SSL, o que pode afetar a credibilidade e a confian\u00e7a dos usu\u00e1rios.<\/li>\n<\/ol>\n\n\n\n<p>Em resumo, o SSL \u00e9 essencial para proteger a privacidade, seguran\u00e7a e integridade dos dados transmitidos pela internet. Implementar SSL em seu site ou aplica\u00e7\u00e3o n\u00e3o \u00e9 apenas uma boa pr\u00e1tica de seguran\u00e7a, mas tamb\u00e9m \u00e9 fundamental para manter a confian\u00e7a e a credibilidade de seus usu\u00e1rios.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Configurando o NGINX para SSL<\/h3>\n\n\n\n<p>Para configurar o NGINX para SSL, vamos seguir alguns passos simples:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>N\u00e3o entrarei em detalhes sobre a instala\u00e7\u00e3o do NGINX no servidor. Voc\u00ea pode conferir nosso outro artigo inicial sobre o assunto <a href=\"https:\/\/adrianosantos.link\/NGINX\" target=\"_blank\" rel=\"noreferrer noopener\">AQUI<\/a> ou ainda consultando a documenta\u00e7\u00e3o no site da <a href=\"https:\/\/nginx.org\/en\/docs\/install.html\" target=\"_blank\" rel=\"noreferrer noopener\">NGINX<\/a>.<\/p>\n<\/blockquote>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Obtenha um Certificado SSL\/TLS<\/strong>: Voc\u00ea pode obter um certificado SSL de uma autoridade de certifica\u00e7\u00e3o confi\u00e1vel ou usar uma solu\u00e7\u00e3o gratuita, como Let&#8217;s Encrypt. Existem muitas empresas no Brasil e fora que vendem certificado digital.<\/li>\n\n\n\n<li><strong>Configure o Certificado no NGINX<\/strong>: Ap\u00f3s obter o certificado, voc\u00ea precisar\u00e1 configur\u00e1-lo no NGINX. Isso envolve a defini\u00e7\u00e3o do caminho para os arquivos de chave privada e certificado SSL no arquivo de configura\u00e7\u00e3o do NGINX.<\/li>\n\n\n\n<li><strong>Atualize a Configura\u00e7\u00e3o do NGINX<\/strong>: Agora, voc\u00ea precisa atualizar sua configura\u00e7\u00e3o do NGINX para ouvir na porta HTTPS (geralmente a porta 443) e definir as diretivas <code>ssl_certificate<\/code> e <code>ssl_certificate_key<\/code> para apontar para os arquivos do certificado e da chave privada, respectivamente.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de Configura\u00e7\u00e3o para API Horse<\/h3>\n\n\n\n<p>Aqui est\u00e1 um exemplo b\u00e1sico de configura\u00e7\u00e3o do NGINX para uma API Horse com SSL:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:yaml decode:true \" >server {\n    listen 443 ssl;\n    server_name seu_dom\u00ednio.com;\n    ssl_certificate \/caminho\/para\/seu_certificado.crt;\n    ssl_certificate_key \/caminho\/para\/sua_chave_privada.key;\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:9000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}<\/pre><\/div>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>listen 443 ssl;<\/strong>: Esta linha define o NGINX para ouvir conex\u00f5es na porta 443, que \u00e9 a porta padr\u00e3o para HTTPS, o protocolo seguro. O &#8220;ssl&#8221; indica que esta porta ser\u00e1 usada para comunica\u00e7\u00f5es SSL\/TLS, garantindo a seguran\u00e7a da conex\u00e3o.<\/li>\n\n\n\n<li><strong>server_name seu_dom\u00ednio.com;<\/strong>: Aqui voc\u00ea deve substituir &#8220;seu_dom\u00ednio.com&#8221; pelo nome de dom\u00ednio real do seu site. Esta diretiva especifica o nome do servidor que vai responder a essa configura\u00e7\u00e3o. Certifique-se de configurar corretamente o nome de dom\u00ednio para o seu site.<\/li>\n\n\n\n<li><strong>ssl_certificate \/caminho\/para\/seu_certificado.crt;<\/strong>: Esta linha aponta para o arquivo do certificado SSL que voc\u00ea adquiriu. O certificado SSL \u00e9 emitido por uma autoridade de certifica\u00e7\u00e3o confi\u00e1vel e \u00e9 usado para criptografar as comunica\u00e7\u00f5es entre o cliente e o servidor. Certifique-se de substituir &#8220;\/caminho\/para\/seu_certificado.crt&#8221; pelo caminho real do seu certificado SSL.<\/li>\n\n\n\n<li><strong>ssl_certificate_key \/caminho\/para\/sua_chave_privada.key;<\/strong>: Esta linha aponta para o arquivo da chave privada correspondente ao seu certificado SSL. A chave privada \u00e9 usada para decifrar as comunica\u00e7\u00f5es criptografadas. Assim como no caso do certificado, certifique-se de substituir &#8220;\/caminho\/para\/sua_chave_privada.key&#8221; pelo caminho real da sua chave privada.<\/li>\n\n\n\n<li><strong>location \/<\/strong>: Esta diretiva especifica a localiza\u00e7\u00e3o na qual as solicita\u00e7\u00f5es ser\u00e3o gerenciadas pelo NGINX. Neste exemplo, todas as solicita\u00e7\u00f5es feitas ao servidor ser\u00e3o tratadas aqui.<\/li>\n\n\n\n<li><strong>proxy_pass <a>http:\/\/127.0.0.1:9000<\/a>;<\/strong>: Aqui \u00e9 onde voc\u00ea define para onde o NGINX ir\u00e1 encaminhar as solicita\u00e7\u00f5es. No exemplo, as solicita\u00e7\u00f5es ser\u00e3o encaminhadas para o endere\u00e7o local do servidor da API Horse, que est\u00e1 rodando na porta 9000. Certifique-se de substituir este endere\u00e7o pelo endere\u00e7o real do seu servidor de aplica\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>proxy_set_header<\/strong>: Essas diretivas definem os cabe\u00e7alhos que ser\u00e3o enviados para o servidor de aplica\u00e7\u00e3o. Neste exemplo, estamos configurando os cabe\u00e7alhos Host, X-Real-IP, X-Forwarded-For e X-Forwarded-Proto. Isso ajuda a manter a integridade das informa\u00e7\u00f5es enviadas para a API Horse e a garantir que ela funcione corretamente.<\/li>\n<\/ol>\n\n\n\n<p>Essa configura\u00e7\u00e3o b\u00e1sica do NGINX para SSL garante uma comunica\u00e7\u00e3o segura entre o cliente e o servidor, protegendo os dados transmitidos e garantindo a integridade das informa\u00e7\u00f5es. Certifique-se de ajustar as op\u00e7\u00f5es de acordo com as configura\u00e7\u00f5es espec\u00edficas do seu servidor e da sua aplica\u00e7\u00e3o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Protegendo sua API Horse<\/h3>\n\n\n\n<p>Com essa configura\u00e7\u00e3o, sua API Horse estar\u00e1 protegida por uma conex\u00e3o SSL\/TLS. Os dados transmitidos entre o cliente e o servidor ser\u00e3o criptografados, garantindo a confidencialidade e integridade das informa\u00e7\u00f5es.<\/p>\n\n\n\n<p>Ao seguir esses passos simples, voc\u00ea pode configurar facilmente o NGINX para SSL e garantir uma camada adicional de seguran\u00e7a para sua aplica\u00e7\u00e3o. Proteja sua API Horse e tranquilize seus usu\u00e1rios com uma conex\u00e3o segura e confi\u00e1vel.<\/p>\n\n\n\n<p>A seguran\u00e7a \u00e9 uma parte fundamental do desenvolvimento web moderno. Ao implementar SSL\/TLS em sua aplica\u00e7\u00e3o, voc\u00ea est\u00e1 protegendo seus dados e mantendo a confian\u00e7a de seus usu\u00e1rios. Experimente configurar o NGINX para SSL hoje mesmo e eleve o n\u00edvel de seguran\u00e7a de sua aplica\u00e7\u00e3o para o pr\u00f3ximo patamar.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/adrianosantos.link\/treinamentos\" target=\"_blank\" rel=\"noreferrer noopener\"><img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"150\" src=\"https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/02\/Banner-Hotmart-1.png\" alt=\"\" class=\"wp-image-222\" srcset=\"https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/02\/Banner-Hotmart-1.png 800w, https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/02\/Banner-Hotmart-1-300x56.png 300w, https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/02\/Banner-Hotmart-1-768x144.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Configurando o NGINX para m\u00faltiplas APIs Horse no mesmo Servidor<\/strong><\/p>\n\n\n\n<p>Quando voc\u00ea tem mais de uma API Horse rodando no mesmo servidor, \u00e9 importante configurar o NGINX adequadamente para rotear o tr\u00e1fego para cada uma delas de forma eficiente. Abaixo, vou detalhar como voc\u00ea pode configurar o NGINX para lidar com v\u00e1rias APIs Horse em portas diferentes:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Evidentemente que focamos em Horse aqui, entretanto qualquer outro servi\u00e7o de API pode ser usado seguindo as mesmas configura\u00e7\u00f5es, exemplo: poder\u00edamos ter uma api desenvolvida em DataSnap, DMVC, xData da TMS entre outros sabores de frameworks. <\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Passo 1: Adicionar Mapeamento de Portas<\/h3>\n\n\n\n<p>Vamos supor que voc\u00ea tenha tr\u00eas APIs Horse rodando nas portas 9000, 3000 e 3100. Voc\u00ea precisar\u00e1 adicionar um mapeamento de portas no arquivo de configura\u00e7\u00e3o do NGINX para cada uma delas.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:yaml decode:true \" >server {\n    listen 80;\n    server_name seu_dom\u00ednio.com;\n    location \/api1 {\n        proxy_pass http:\/\/127.0.0.1:9000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n    location \/api2 {\n        proxy_pass http:\/\/127.0.0.1:3000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n    location \/api3 {\n        proxy_pass http:\/\/127.0.0.1:3100;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}<\/pre><\/div>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\"><\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<p>Neste passo, estamos configurando o NGINX para encaminhar solicita\u00e7\u00f5es HTTP para diferentes portas, onde nossas APIs Horse est\u00e3o sendo executadas. Para cada API, criamos uma nova localiza\u00e7\u00e3o (<code>location<\/code>) no arquivo de configura\u00e7\u00e3o do NGINX.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Rota para a API 1 (Porta 9000):<\/h4>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:yaml decode:true \" >location \/api1 {\n    proxy_pass http:\/\/127.0.0.1:9000;\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n}<\/pre><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>location \/api1<\/code>: Esta linha define a rota na qual as solicita\u00e7\u00f5es para a API 1 ser\u00e3o encaminhadas. Ou seja, qualquer solicita\u00e7\u00e3o que comece com &#8220;\/api1&#8221; ser\u00e1 enviada para esta localiza\u00e7\u00e3o no NGINX.<\/li>\n\n\n\n<li><code>proxy_pass http:\/\/127.0.0.1:9000;<\/code>: Aqui estamos configurando o NGINX para encaminhar todas as solicita\u00e7\u00f5es que correspondem \u00e0 rota &#8220;\/api1&#8221; para a porta 9000, onde a API 1 est\u00e1 sendo executada localmente no servidor. O NGINX atua como um proxy reverso, encaminhando as solicita\u00e7\u00f5es para a API Horse na porta especificada.<\/li>\n\n\n\n<li><code>proxy_set_header<\/code>: Essas linhas definem os cabe\u00e7alhos HTTP que ser\u00e3o enviados para a API. Eles ajudam a manter a integridade das informa\u00e7\u00f5es enviadas para a API Horse e a garantir que ela funcione corretamente. Por exemplo, <code>proxy_set_header Host $host;<\/code> garante que o cabe\u00e7alho <code>Host<\/code> seja definido corretamente para a solicita\u00e7\u00e3o encaminhada.<\/li>\n<\/ul>\n\n\n\n<p>As rotas para as APIs 2 e 3 s\u00e3o configuradas de forma semelhante, substituindo <code>\/api1<\/code> por <code>\/api2<\/code> e <code>\/api3<\/code>, respectivamente, e ajustando a porta de acordo com a porta em que cada API est\u00e1 sendo executada. Essa configura\u00e7\u00e3o permite que o NGINX roteie as solicita\u00e7\u00f5es para as APIs Horse corretamente, com base na rota especificada na URL de cada solicita\u00e7\u00e3o.<\/p>\n\n\n\n<p>Perceba que n\u00e3o \u00e9 nenhum bicho de 7 cabe\u00e7as manter a configura\u00e7\u00e3o para mais de uma API, possibilitando ter &#8220;n&#8221; servi\u00e7os Horse rodando no mesmo servidor sem quaisquer complica\u00e7\u00f5es.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Passo 2: Testar a Configura\u00e7\u00e3o<\/h3>\n\n\n\n<p>Ap\u00f3s adicionar o mapeamento de portas para cada API, \u00e9 importante testar a configura\u00e7\u00e3o do NGINX para garantir que tudo esteja funcionando corretamente. Voc\u00ea pode fazer isso reiniciando o NGINX e enviando solicita\u00e7\u00f5es para cada API para verificar se as respostas est\u00e3o sendo encaminhadas corretamente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Passo 3: Monitorar e Ajustar<\/h3>\n\n\n\n<p>Por fim, lembre-se de monitorar o desempenho do NGINX e das APIs Horse regularmente. Se necess\u00e1rio, ajuste a configura\u00e7\u00e3o do NGINX para otimizar o roteamento de tr\u00e1fego e garantir que todas as APIs estejam funcionando de forma eficiente.<\/p>\n\n\n\n<p>Ao seguir esses passos, voc\u00ea ser\u00e1 capaz de configurar o NGINX para lidar com m\u00faltiplas APIs Horse em um \u00fanico servidor, permitindo que voc\u00ea ofere\u00e7a servi\u00e7os escal\u00e1veis e eficientes para seus usu\u00e1rios.<\/p>\n\n\n\n<p><strong>Adicionando considera\u00e7\u00f5es sobre a configura\u00e7\u00e3o ideal e alternativas para Projetos Iniciais:<\/strong><\/p>\n\n\n\n<p>\u00c9 importante ressaltar que, em um cen\u00e1rio ideal e de produ\u00e7\u00e3o, a configura\u00e7\u00e3o mais recomendada seria ter um servidor exclusivo dedicado ao NGINX e uma infraestrutura distribu\u00edda, com cada API Horse sendo executada em servidores ou inst\u00e2ncias Docker separadas. Isso proporcionaria uma arquitetura mais escal\u00e1vel, resiliente e de alto desempenho.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Caso n\u00e3o saiba o que \u00e9 Docker, leia nosso artigo sobre o assunto <a href=\"https:\/\/adrianosantos.link\/Docker\" target=\"_blank\" rel=\"noreferrer noopener\">AQUI<\/a>.<\/p>\n<\/blockquote>\n\n\n\n<p>Em uma configura\u00e7\u00e3o distribu\u00edda, cada API Horse teria sua pr\u00f3pria inst\u00e2ncia, o que permitiria um melhor isolamento, balanceamento de carga e escalabilidade horizontal conforme necess\u00e1rio. Al\u00e9m disso, utilizando containers Docker, seria poss\u00edvel gerenciar facilmente o ciclo de vida das aplica\u00e7\u00f5es e garantir a consist\u00eancia do ambiente de execu\u00e7\u00e3o.<\/p>\n\n\n\n<p>Abaixo est\u00e1 um exemplo simples de como configurar o NGINX para apontar para inst\u00e2ncias Docker separadas, cada uma hospedando uma API Horse:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:yaml decode:true \" >server {\n    listen 80;\n    server_name seu_dom\u00ednio.com;\n    location \/api1 {\n        proxy_pass http:\/\/ip_da_instancia_docker_api1:9000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n    location \/api2 {\n        proxy_pass http:\/\/ip_da_instancia_docker_api2:3000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n    location \/api3 {\n        proxy_pass http:\/\/ip_da_instancia_docker_api3:3100;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}<\/pre><\/div>\n\n\n\n<p>Neste exemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Para cada API, criamos uma nova localiza\u00e7\u00e3o (<code>location<\/code>) no arquivo de configura\u00e7\u00e3o do NGINX.<\/li>\n\n\n\n<li>Dentro de cada localiza\u00e7\u00e3o, configuramos <code>proxy_pass<\/code> para encaminhar as solicita\u00e7\u00f5es para o endere\u00e7o IP e porta da inst\u00e2ncia Docker correspondente \u00e0 API.<\/li>\n\n\n\n<li><code>proxy_set_header<\/code> \u00e9 usado para definir os cabe\u00e7alhos HTTP corretos para a passagem do proxy reverso.<\/li>\n<\/ul>\n\n\n\n<p>Certifique-se de substituir <code>seu_dom\u00ednio.com<\/code> pelo seu dom\u00ednio real e <code>ip_da_instancia_docker_apiX<\/code> pelos IPs das inst\u00e2ncias Docker onde suas APIs Horse est\u00e3o sendo executadas. Essa configura\u00e7\u00e3o permite que o NGINX encaminhe as solicita\u00e7\u00f5es para as inst\u00e2ncias Docker corretas com base na rota especificada na URL de cada solicita\u00e7\u00e3o.<\/p>\n\n\n\n<p>Supondo que temos tr\u00eas inst\u00e2ncias Docker, cada uma rodando uma API Horse em uma porta diferente (por exemplo, 9000, 3000 e 3100), aqui est\u00e1 como seria a configura\u00e7\u00e3o do NGINX:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/adrianosantos.link\/HorseDocker\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"800\" height=\"150\" src=\"https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/03\/Horse-em-Docker-no-Amazon-AWS.png\" alt=\"\" class=\"wp-image-238\" srcset=\"https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/03\/Horse-em-Docker-no-Amazon-AWS.png 800w, https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/03\/Horse-em-Docker-no-Amazon-AWS-300x56.png 300w, https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/03\/Horse-em-Docker-no-Amazon-AWS-768x144.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/figure>\n\n\n\n<p>No entanto, \u00e9 importante reconhecer que essa abordagem pode implicar em custos adicionais, uma vez que seria necess\u00e1rio contratar e manter m\u00faltiplas inst\u00e2ncias de servidor ou cont\u00eaineres Docker. Para projetos iniciantes ou para fins de prova de conceito (POC), rodar todas as APIs Horse em um \u00fanico servidor pode ser uma op\u00e7\u00e3o vi\u00e1vel e econ\u00f4mica.<\/p>\n\n\n\n<p>Ao utilizar um \u00fanico servidor para todas as APIs, os desenvolvedores podem testar a integra\u00e7\u00e3o das diferentes partes do sistema, validar o funcionamento b\u00e1sico das APIs e avaliar a viabilidade do projeto sem comprometer um investimento significativo em infraestrutura desde o in\u00edcio.<\/p>\n\n\n\n<p>Portanto, enquanto a configura\u00e7\u00e3o ideal pode envolver uma arquitetura distribu\u00edda e escal\u00e1vel, iniciar com um \u00fanico servidor pode ser um primeiro passo pr\u00e1tico e econ\u00f4mico para dar in\u00edcio ao desenvolvimento de um projeto e validar sua viabilidade inicialmente. \u00c0 medida que o projeto evolui e as necessidades de escalabilidade aumentam, ajustes na infraestrutura podem ser feitos para atender aos requisitos de produ\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<p class=\"has-large-font-size\"><strong>Conclus\u00e3o<\/strong><\/p>\n\n\n\n<p>Ao longo deste artigo, exploramos como configurar o NGINX para lidar com v\u00e1rias APIs Horse em um servidor, desde uma configura\u00e7\u00e3o b\u00e1sica at\u00e9 cen\u00e1rios mais complexos. Aprendemos a import\u00e2ncia do SSL na prote\u00e7\u00e3o das comunica\u00e7\u00f5es web e como implement\u00e1-lo no NGINX para garantir a seguran\u00e7a das nossas APIs. Al\u00e9m disso, discutimos a configura\u00e7\u00e3o ideal em um ambiente de produ\u00e7\u00e3o, que envolve servidores exclusivos para o NGINX e inst\u00e2ncias Docker separadas para cada API, equilibrando desempenho, escalabilidade e custo. Por fim, reconhecemos que, para projetos iniciais, pode ser vi\u00e1vel iniciar com todas as APIs em um \u00fanico servidor como uma prova de conceito econ\u00f4mica, antes de expandir para uma arquitetura mais distribu\u00edda. Ao seguir estas orienta\u00e7\u00f5es, os desenvolvedores podem construir infraestruturas robustas e escal\u00e1veis para suas aplica\u00e7\u00f5es, adaptando-se \u00e0s necessidades do projeto e garantindo sua efici\u00eancia e seguran\u00e7a.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Comunidade no <a href=\"https:\/\/t.me\/AdrianoSantosCommunity\">Telegram<\/a><\/p>\n\n\n\n<p>\ud83d\ude80Comente no campo abaixo \ud83d\udc47\ud83d\udc47\ud83d\udc47 o que achou e qual sua d\u00favida.<\/p>\n\n\n\n<p>Te vejo na pr\u00f3xima<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Adriano Santos<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A seguran\u00e7a \u00e9 uma preocupa\u00e7\u00e3o primordial em qualquer aplica\u00e7\u00e3o web moderna, e uma parte crucial disso \u00e9 a implementa\u00e7\u00e3o do SSL\/TLS para criptografar a comunica\u00e7\u00e3o entre o cliente e o servidor. Neste artigo, vamos explorar como configurar o NGINX para SSL e garantir uma conex\u00e3o segura para sua API Horse rodando em um servidor Linux.<\/p>\n","protected":false},"author":1,"featured_media":288,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,1,23],"tags":[20,14,21,25,12,26,27],"class_list":["post-271","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-api","category-blog","category-infraestrutura","tag-api","tag-delphi","tag-horse","tag-nginx","tag-rest","tag-ssl","tag-tls"],"_links":{"self":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/comments?post=271"}],"version-history":[{"count":14,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/271\/revisions"}],"predecessor-version":[{"id":477,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/271\/revisions\/477"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media\/288"}],"wp:attachment":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media?parent=271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/categories?post=271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/tags?post=271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}