기본 서버를 방지하는 가장 좋은 방법은 무엇입니까?


26

나는 많은 vhost를 가지고 있으며 빈 페이지, 오류 페이지 또는 일반적으로 Nginx의 리소스를 가장 효율적으로 사용하는 다른 호스트를 통해 기본 vhost를 "끄기"하고 싶습니다. 사전 정의 된 도메인.

답변:


42

HTTP 444 코드 를 리턴하는 default_server 를 정의하십시오 .

server {
    listen      80 default_server;
    server_name _;
    return      444;
}

(4xx 오류 코드를 반환한다는 것은 클라이언트가 요청을 실패한 요청으로 해석 할 수 있음을 의미합니다. HTTP 200 빈 페이지이지만 완전히 작동했습니다 .)


2
444는 비표준 nginx 특정 코드입니다. "연결을 닫는 특수 nginx의 비표준 코드 444가 반환됩니다"
bzeaman

2
https에서는 작동하지 않습니다. ssl 핸드 셰이크가 먼저 발생하고 444를 반환하기 전에 nginx에서 오류가 발생하므로 간단한 듣기 443 default_server가 작동하지 않습니다. 아직 시도하지 않았지만 작동 해야하는 한 가지 해결책은 기본 https 서버에 대한 자체 서명 인증서를 작성하고 선택적으로 브라우저 오류가 발생하지 않도록 http로 리디렉션하십시오.
Simon Bengtsson

SSL 연결을 거부 할 수있는 좋은 방법을 제공하는 nginx 티켓이 여기 있습니다 . 또한 해결 방법 , 설정을 제공 합니다 ssl_ciphers aNULL;.
nh2

나는 (nginx를 자신과 같은 비 SNI를 지원하는 HTTPS 클라이언트 중단됩니다 언급 한 문제를 해결합니다 proxy_pass, 당신은 설정하지 않는 한을 proxy_ssl_server_name on;다른 도달) server_names(그래서 기본적으로 깰 합법적 인 server_name사용자가 해당 포트 443의를 않습니다 통해 수 있도록 할을). 자세한 내용은 trac.nginx.org/nginx/ticket/195#comment:11 을 참조하십시오.
nh2 2016 년

4

빈 index.html 파일이있는 디렉토리를 가리키는 기본 가상 호스트를 정의 하십시오.

server {
    listen       80 default_server;
    server_name  _ ;
    root /var/www/placeholder ; 
    index index.html;
}

빈 인덱스를 / var / www / placeholder에 배치하십시오.


도메인 이름과 일치하지 않는 모든 요청과 빈 페이지로 응답합니다.
wojciechz

당신은 return '';대신에 할 수 없습니까 root...index?
oriadam

0

왜 모든 것을 거부하지 않는가

server {
    listen       80 default_server;
    server_name  _;

    location / {
        deny    all;
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.