sitelink1  
sitelink2  
extra_vars5  
extra_vars6  

ChatGPT 의 답변은 아래에 기술하였다.

답변중 1, 3 번의 조치만으로도 문제를 해결하였는데, 

2번 Jetty 에서의 SNI 비활성화 설정은 Gradle 에서의 Jetty 에 대한 설정 방법을 먼저 찾아야해서 2번 작업을 생략한 상태로 3번을 먼저 처리했는데

2번을 수행하지 않아도 문제가 해결되어서 이번 작업에서는 무시하였다.

 

 


Nginx를 통해 dev.omnibuscode.com 도메인의 요청을 localhost:7443 포트의 Jetty 서버로 프록시할 때, org.eclipse.jetty.http.BadMessageException: 400: Invalid SNI 오류가 발생하는 원인과 해결 방법은 다음과 같습니다.

이 오류는 SNI(Server Name Indication)가 올바르게 설정되지 않았을 때 발생합니다.

이를 해결하려면 Nginx와 Jetty의 SSL 설정을 조정하여 서로 호환되도록 만들어야 합니다.

아래의 방법을 순서대로 적용해 보세요.

1. Nginx 설정 수정하기

Nginx의 설정 파일에서 proxy_ssl_server_name 옵션을 설정하여 SNI 정보가 포함되도록 합니다.

server {
    listen 443 ssl;
    server_name dev.omnibuscode.com;

    ssl_certificate /path/to/your/certificate.crt;
    ssl_certificate_key /path/to/your/private.key;

    location / {
        proxy_pass https://localhost:7443;
        proxy_ssl_server_name on;
    }
}

2. Jetty에서 SNI 비활성화하기 (옵션)

만약 Jetty에서 SNI 요구를 비활성화하고자 한다면, Jetty 설정 파일 (jetty-ssl.xml 또는 start.ini 파일 등)에 SNI 설정을 추가할 수 있습니다.

예를 들어, SNIRequired 옵션을 비활성화하는 방법입니다:

<Configure id="Server" class="org.eclipse.jetty.server.Server">
    <Call name="addConnector">
        <Arg>
            <New class="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
                <Set name="SNIRequired">false</Set>
            </New>
        </Arg>
    </Call>
</Configure>
 

3. 클라이언트와 서버 호스트 이름 일치 확인하기

Jetty에서 SNI가 localhost가 아닌 특정 도메인에 대해 설정된 경우, 해당 도메인과 일치하는 요청이 전달되지 않으면 오류가 발생할 수 있습니다.

Nginx에서 proxy_set_header Host dev.omnibuscode.com;을 설정하여 호스트 이름이 올바르게 전달되도록 하세요.

location / {
    proxy_pass https://localhost:7443;
    proxy_ssl_server_name on;
    proxy_set_header Host dev.omnibuscode.com;
}
 

위 설정으로 Nginx가 Jetty로 전달할 때 올바른 SNI와 호스트 이름 정보를 포함하게 됩니다.

Nginx와 Jetty의 설정을 적용한 후, Jetty 서버를 재시작하고 다시 시도해 보세요.