AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1164030
Accepted
Abdelrahman Ayman
Abdelrahman Ayman
Asked: 2024-08-19 01:10:22 +0800 CST2024-08-19 01:10:22 +0800 CST 2024-08-19 01:10:22 +0800 CST

Servindo dois contêineres Docker com SSL usando Nginx

  • 772

EDIT: esqueci de mencionar que ambos flutter.example.comprecisam nodejs.example.comestar disponíveis externamente - como site e serviço de API para um aplicativo móvel, respectivamente.

Edição 2: me sinto um pouco bobo, então vou ler sobre proxies reversos. Obrigado.

Eu tenho uma VM Ubuntu20:04LTE no Azure. Eu tenho dois contêineres, um executando Flutter webapp fluttere outro executando um servidor NodeJs api, ambos possuem certificados SSL instalados na máquina host usando Certbot. Ambos os contêineres estão na mesma rede docker padrão chamada bridge.

Digamos que ambos os contêineres possam ser acessados ​​por meio dos seguintes URLs:

flutter.example.comcom endereço IP local 172.17.0.4na porta5556

nodejs.example.comcom endereço IP local 172.17.0.2na porta5000

Quero que meu fluttercontêiner consuma um endpoint apilocalmente por meio da rede host sem precisar usar o https://nodejs.example.com/example/endpoint.

quando entro no meu fluttercontêiner e executo:

curl http://172.17.0.5:5555/status

Recebo uma resposta do apicontêiner, mas quando executo o mesmo comando com httpsem vez de http, recebo o seguinte erro:

OpenSSL/3.3.1: error:0A0000C6:SSL routines::packet length too long

Aqui está meu arquivo conf Nginx paraflutter

server {
  server_name flutter.example.com;

     #access_log  /var/log/nginx/host.access.log  main;

    location / {
        proxy_pass http://localhost:5556; #whatever port your app runs on
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        #stub_status on;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/flutter.example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/flutter.example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = flutter.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


  listen 80;
  server_name flutter.example.com;
    return 404; # managed by Certbot


}

Aqui estão meus arquivos conf do Nginx paraapi

server {
    server_name  nodejs.example.com;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        proxy_pass http://localhost:5000; #whatever port your app runs on
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        #stub_status on;
    }

    
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/nodejs.example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/nodejs.example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
    if ($host = nodejs.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen       80;
    server_name  nodejs.example.com;
    return 404; # managed by Certbot


}

Pesquisei esse problema específico no Google e não consigo fazê-lo funcionar. As solicitações precisam ser feitas por meio do nome de domínio? Isso significa que eles já estão se comunicando localmente porque tenho o Nginx? O que estou perdendo, estou perdido.

nginx
  • 1 1 respostas
  • 70 Views

1 respostas

  • Voted
  1. Best Answer
    vidarlo
    2024-08-19T02:44:03+08:002024-08-19T02:44:03+08:00

    quando eu entro no meu contêiner flutter e executo: curl http://172.17.0.5:5555/status

    Recebo uma resposta do contêiner da API, mas quando executo o mesmo comando com https em vez de http, recebo o seguinte erro:

    OpenSSL/3.3.1: error:0A0000C6:SSL routines::packet length too long
    

    httpse httpuse portas diferentes. Além disso, 5555não é nginx, mas sim acesso direto ao seu backend. Parece que você configurou o nginx como proxy reverso; nesse caso, você terá que usar nomes de host; por exemplo, https://nodejs.example.com/foo/barcomo URL.

    Se você deseja que as coisas sejam acessíveis apenas localmente, não faz sentido usar o nginx como proxy reverso, nem faz sentido usar https.

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve