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 请求,为什么?我的域名和 listen 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你可以做一个如果在块上检查域是否正确。我的意思是,我猜它有效,但我不想将它添加到每个块中。如果你认为这是一个更好的主意,请告诉我。

相关内容