天天看點

nginx--default_server定義規則及配置

nginx 的 default_server 指令可以定義預設的 server 出處理一些沒有成功比對 server_name 的請求,如果沒有顯式定義,則會選取第一個定義的 server 作為 default_server。

在了解到如上規則後,我們可以捕獲未做綁定的域名通路或直接IP通路,做重定向到403頁面等處理。

1、nginx 隐式的 default server

http {
    # 如果沒有顯式聲明 default server 則第一個 server 會被隐式的設為 default server
    server {
        listen 80;
        server_name _; # _ 并不是重點 __ 也可以 ___也可以
        return 403; # 403 forbidden
    }
    
    server {
        listen 80;
        server_name www.a.com;
        ...
    }
    
    server {
        listen 80;
        server_name www.b.com;
        ...
    }
}           

很多人複制粘貼廣泛傳播 server_name 要設為 '_',其實一毛錢的關系也沒有。'_' 隻是作為一個和業務域名無關的請求回收服務而已,如果我們線上的業務都是明确的業務域名通路,那泛解析造成的一些非業務域名或ip通路都會被這個 sever 回收處理。

2、顯示的定義一個 default server

http {
    server {
        listen 80;
        server_name www.a.com;
        ...
    }
    
    server {
        listen 80;
        server_name www.b.com;
        ...
    }
    
    # 顯示的定義一個 default server
    server {
        listen 80 default_server;
        server_name _;
        return 403; # 403 forbidden
    }
    
}           

3、直接指定server_name 為 ip(隻能禁止ip通路)

http {
    server {
        listen 80;
        server_name www.a.com;
        ...
    }
    
    server {
        listen 80;
        server_name www.b.com;
        ...
    }
    
    # 直接指定 ip server_name
    server {
        listen 80;
        server_name xxx.xxx.xxx.xxx;
        return 403; # 403 forbidden
    }
    
}           

繼續閱讀