Nginx [ChatGPT] nginx 에서 jetty 서버로 프록시중 "org.eclipse.jetty.http.BadMessageException: 400: Invalid SNI" 오류
| 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 서버를 재시작하고 다시 시도해 보세요.
