Configurando Nginx e Tomcat para acessar conteúdo HTTPS

Configurando Nginx e Tomcat para acessar conteúdo HTTPS

Estou usando o nginx como balanceador de carga e proxy reverso para Java Spring Boot + aplicativo Angular no Tomcat. Tenho um total de 3 servidores, 1 tem nginx e outros dois têm aplicativos hospedados nele.

Configurei HTTPS e SSL no nginx para que os usuários possam se comunicar por HTTPS. Com a configuração abaixo consigo acessar a página de login do aplicativo em https, mas quando clico no botão de login estou recebendo um erro no console

Conteúdo misto: a página em 'https://example/app/login' foi carregada por HTTPS, mas solicitou um endpoint XMLHttpRequest inseguro 'http://172.16.1.70:8081/app/api/login'. Esta solicitação foi bloqueada; o conteúdo deve ser veiculado por HTTPS.

Aqui está minha configuração do Nginx

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    access_log  logs/access.log;
    
    # Load Balancer Setup
    upstream tomcat {
        server 172.168.1.10:8443;
        server 172.168.1.15:8443;
        ip_hash;
    }
    server {
        listen 80 ;
        listen  443 ssl http2;
        
        server_name  localhost;
        ssl_certificate      C:/ssl/sslcert.pem;
        ssl_certificate_key  C:/ssl/sslcert-key.pem;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
                
    location /app {
        proxy_read_timeout 120;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cookie_path ~*^/.* /;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://tomcat;
        }
    
    # Auto redirect to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
        }
    
    # Auto redirect to localhost/app
    location / {
        return 307 /app;
        }
    }
}

Aqui está minha configuração do tomcat server.xml

<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"              
               redirectPort="8443"/>
               
    <Connector port="8443" protocol="HTTP/1.1"
           connectionTimeout="20000"
           proxyPort="443"
           scheme="https" secure="true"
            />

Tentei depurar verificando a guia rede e de alguma forma redirecionando a página de login parahttp://172.168.1.10:8081/app/api/loginem vez dehttp://172.168.1.10:8443/app/api/login.

Como posso resolver esse problema. Qualquer ajuda será apreciada.

Responder1

Configure seu servidor back-end para servir a URL que aponta para o proxy reverso. Com o Tomcat, isso geralmente é feito com os atributos proxyNamee proxyPortno conector. Você está sentindo falta do primeiro.

Dependendo de como o aplicativo em execução no Tomcat é construído, pode ser necessário configurá-lo também em alguma configuração específica do aplicativo.

informação relacionada