HTTPS 콘텐츠에 액세스하도록 Nginx 및 Tomcat 구성

HTTPS 콘텐츠에 액세스하도록 Nginx 및 Tomcat 구성

저는 nginx를 로드 밸런서로 사용하고 있으며 Tomcat의 Java spring boot + Angular 애플리케이션에 대한 역방향 프록시를 사용하고 있습니다. 총 3개의 서버가 있는데, 1개에는 nginx가 있고 다른 2개에는 애플리케이션이 호스팅되어 있습니다.

사용자가 HTTPS를 통해 통신할 수 있도록 nginx에 HTTPS와 SSL을 구성했습니다. 아래 구성을 사용하면 https에서 애플리케이션의 로그인 페이지에 연결할 수 있지만 로그인 버튼을 클릭하면 콘솔에 오류가 발생합니다.

혼합 콘텐츠: 'https://example/app/login' 페이지가 HTTPS를 통해 로드되었지만 안전하지 않은 XMLHttpRequest 엔드포인트 'http://172.16.1.70:8081/app/api/login'을 요청했습니다. 이 요청은 차단되었습니다. 콘텐츠는 HTTPS를 통해 제공되어야 합니다.

내 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;
        }
    }
}

내 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"
            />

네트워크 탭을 확인하여 디버깅을 시도했는데 어떻게 든 로그인 페이지를 다음으로 리디렉션했습니다.http://172.168.1.10:8081/app/api/login대신에http://172.168.1.10:8443/app/api/login.

이 문제를 어떻게 해결할 수 있습니까? 도움을 주시면 감사하겠습니다.

답변1

역방향 프록시를 가리키는 URL을 서버하도록 백엔드 서버를 구성합니다. Tomcat을 사용하면 일반적으로 커넥터의 proxyName및 속성을 사용하여 이 작업이 수행됩니다. proxyPort당신은 전자를 놓치고 있습니다.

Tomcat에서 실행되는 애플리케이션이 구축되는 방식에 따라 일부 애플리케이션별 구성에서도 이를 구성해야 할 수도 있습니다.

관련 정보