Cách tốt nhất để ngăn chặn máy chủ mặc định?


26

Tôi có một số vhost và tôi muốn "tắt" vhost mặc định, bằng trang trống, trang lỗi hoặc nói chung là sử dụng tài nguyên của Nginx hiệu quả nhất, trong khi chỉ cho phép các vhost khác truy cập qua tên miền được xác định trước.

Câu trả lời:


42

Xác định một default_server trả về mã HTTP 444 :

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

(Trả lại mã lỗi 4xx có nghĩa là các yêu cầu có thể được khách hàng hiểu là một yêu cầu không thành công, thay vào đó là một trang trống HTTP 200 nhưng hoàn toàn tin tưởng tôi .)


2
444 là mã cụ thể nginx không chuẩn : "
bzeaman

2
Điều này không hoạt động cho https. Nghe đơn giản 443 default_server sẽ không hoạt động vì bắt tay ssl trước hết xảy ra và nginx sẽ báo lỗi trước khi trả về 444. Một giải pháp tôi chưa thử nhưng nên hoạt động là tạo chứng chỉ tự ký cho máy chủ https mặc định và tối ưu hóa chuyển hướng đến http để tránh bất kỳ lỗi trình duyệt.
Simon Bengtsson

Vé nginx để cung cấp một cách hay để từ chối các kết nối SSL có ở đây . Họ cũng cung cấp một cách giải quyết , thiết lập ssl_ciphers aNULL;.
nh2

Lưu ý workaround tôi đã đề cập sẽ phá vỡ các khách hàng HTTPS phi SNI có khả năng (như nginx của riêng proxy_pass, trừ khi bạn đặt proxy_ssl_server_name on;) xâm nhập bất kỳ khác server_names(vì vậy về cơ bản phá vỡ hợp pháp server_names cho cổng 443 mà bạn làm muốn cho qua). Xem trac.nginx.org/nginx/ticket/195#comment:11 để biết chi tiết.
nh2

4

Chỉ cần xác định vhost mặc định sẽ trỏ đến thư mục với tệp index.html trống.

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

và đặt chỉ mục trống trong / var / www / giữ chỗ


nó sẽ nắm bắt mọi yêu cầu không đạt được bất kỳ tên miền nào của bạn và phản hồi với trang trống.
wojciechz

Bạn có thể chỉ return '';thay vì root...index?
oriadam

0

tại sao không phủ nhận tất cả

server {
    listen       80 default_server;
    server_name  _;

    location / {
        deny    all;
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.