요청된 사이트가 포트 80에서 수신 대기하지 않으면 nginx가 잘못된 사이트로 이동합니다.

요청된 사이트가 포트 80에서 수신 대기하지 않으면 nginx가 잘못된 사이트로 이동합니다.

단일 서버에서 프로덕션(www.myexample.com)과 개발(dev.myexample.com)을 모두 수행했으며, 서버 블록과 별도의 디렉터리를 사용하고 둘 다 포트 80에서 수신 대기했습니다. 이것은 잘 작동했습니다.

이제 SSL 인증서를 설치하고 사이트 구성 파일에서 SSL 모드를 활성화했습니다. 동시에 수신 대기 포트를 80에서 443으로 변경했으므로 사이트는 포트 80에서 응답하지 않고 포트 443에서만 응답해야 합니다. 개발 사이트는 여전히 그대로 실행 중입니다.

이제 연결하면 오류 대신 개발 사이트가 표시되는 것 같습니다.http://www.myexample.com.

이 문제를 해결하기 위해 실제 "기본" 서버 블록(server_name이 _로 설정됨)을 추가하고 파일이 없는 디렉터리를 지정했습니다.

더 좋은 방법이 있나요? 실제 기본 웹 사이트를 원한다면 알려진 호스트 이름으로 표시되는 것을 원하지 않습니다. fr www.myexaple.com:80을 수신하는 서버 블록을 생성하고 모든 페이지 요청을 어떻게든 거부하도록 구성해야 할 것 같은데, 어떻게 해야 할까요?

내가 호스팅하지 않는 사이트에 대한 요청에 대한 응답을 완전히 중단하려면 어떻게 해야 합니까?

답변1

잘못된 호스트 이름으로 기본 서버를 구성하는 것은 항상 좋은 생각입니다. 이렇게 하면 호스트 헤더 필드가 설정되지 않은(또는 구성하지 않은 호스트가 있는) 클라이언트가 거부됩니다.

server {
    listen              [::]:80 backlog=65536 default_server deferred ipv6only=off rcvbuf=16k sndbuf=512k;
    server_name         _;
    return              403;
}

server {
    listen              [::]:443 backlog=65536 default_server deferred ipv6only=off rcvbuf=16k sndbuf=512k spdy ssl;
    server_name         _;
    ssl_certificate     certificates/_/pem;
    ssl_certificate_key certificates/_/key;
    return              403;
}

https://github.com/Fleshgrinder/nginx-configuration

보시다시피 403 Access Forbidden 상태 코드가 반환됩니다. 이는 내 사용 사례에 가장 적합한 코드이기 때문입니다(아래 설명 참조). 아무것도 반환하지 않으려면 특수 nginx 코드 444를 사용하세요.

관련 정보