nginx catch-all 捕獲所有內容

nginx catch-all 捕獲所有內容

你好,我得到了這個預設文件

server {
    listen 80 default_server;
    listen 443 default_server;
    listen [::]:80 default_server;
    listen [::]:443 default_server;
    server_name _;
    return 444;
}

這捕獲了所有內容......在同一個資料夾(啟用網站)中我得到了我的domain.com文件

server {
    listen 80;
    server_name my.domain.com;
    location /.well-known/acme-challenge {
        default_type "text/plain";
        root /storage/webserver/certbot;
    }
    #Forces all other requests to HTTPS
    location / {
        return 301 https://$host$request_uri;
    }
}
server {
    listen 443 ssl http2;
    server_name my.domain.com;
    ## SSL STUFF ##
    root /path/to/root;
    index index.html index.php;

    location / {
        try_files $uri $uri/ $uri.html;
    }


    ### Site config
}

如果我保留預設為停用(刪除)並轉到 my.domain.com,我會看到我的頁面。現在,如果我新增預設文件,我會從 Nginx 收到 444(已關閉)。為什麼..?

編輯:經過一些測試,我發現問題出在listen 443 default_server;它捕獲每個 https 請求,為什麼?我的網域被封鎖並監聽 443!

答案1

根據這個答案https://serverfault.com/a/841646/459947

我必須在 catch_all 中新增一個憑證。在我使用自簽名憑證執行此操作後,我的 IP 上收到 444(正確,因為它沒有封鎖)和 SSL 警告,在 HTTPS 上接受我的 IP 時收到 444。所以這對我有用,我希望有更好的方法來做到這一點。

server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name _;
    ssl_certificate <path to cert>
    ssl_certificate_key <path to key>
    return 444;
}

根據https://serverfault.com/a/593668/459947你可以做一個如果在區塊上檢查網域是否正確。我的意思是我猜它有效,但我不想將其添加到每個區塊中。我認為這是一個更好的主意,請告訴我。

相關內容