Nginx를 사용중인 서버에 HTTPS 포트인 443에 도메인 대신 IP로 접속하면 가장 먼저 설정된 HTTPS 서버의 인증서가 전달되고 브라우저에는 인증서 경고가 뜬다. 이때 인증서를 확인하는 것으로 이 서버에 어떤 사이트가 설정되어 있다는 정보가 노출될 수 있다.
Nginx 1.19.4 버전부터 ssl_reject_handshake 설정이 추가되었다. http나 server 블록 안에 이 설정을 사용하면 아무 인증서나 보내지 않고 SSL 연결을 거부한다. 설정은 간단하게 아래와 같이 하면 된다:
server { listen 443 ssl default_server; ssl_reject_handshake on; }
이렇게 하면 IP로 접속해도 인증서 경고 대신 연결 실패가 뜬다.
참고로 아직 Nginx 버전이 1.19.4 이하인 우분투 21.04 같은 배포판에서는 위의 설정을 사용할 수 없다. 이런 경우는 openssl로 직접 인증서를 생성해서 사용하는 것으로 대체할 수 있다. 위의 설정처럼 default_server로 된 더미 server 블록을 만들고 자가 서명 인증서를 사용하도록 하면 된다. 그러면 IP로 접속하여도 실제 사용되는 인증서가 아니라 임의로 만든 인증서가 전달된다.