nginx如何防止非 server_name 配置的域名访问

在 Nginx 中,如果客户端请求的域名未在 server_name 指定的配置中匹配,Nginx 仍然会将请求转发到默认的 server 块。为了防止非 server_name 配置的域名访问,可以使用以下几种方法: 方法 1:使用默认 server 块拦截未匹配的域名 在 Nginx 配置文件中(通常是 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf),添加一个默认的 server 块,只允许 server_name 明确配置的域名访问,其他所有未匹配的域名都返回 444(直接断开连接)。 1 2 3 4 5 6 7 server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 444; } 解释 listen 80 default_server;:表示该 server 块是默认的服务器,所有未匹配的请求都会进入这里。 server_name _;:这个 _ 是一个通配符,表示未匹配的任何域名都会进入该 server 块。 return 444;:返回 444 状态码,直接断开连接,不给客户端任何响应,提高安全性。 方法 2:使用 if 语句在特定 server 块中拦截 如果不想使用默认 server 块,也可以在你的业务 server 块中检查 Host 头,拒绝非指定域名的访问。 1 2 3 4 5 6 7 8 9 10 11 12 server { listen 80; server_name example.com www.example.com; if ($host !~* ^(example\.com|www\.example\.com)$) { return 403; } location / { proxy_pass http://127.0.0.1:8080; } } 解释 if ($host !~* ^(example\.com|www\.example\.com)$):检查 Host 头,如果不符合 example.com 或 www.example.com,则返回 403 Forbidden。 return 403;:拒绝访问。 ⚠️ 注意:Nginx 官方不推荐 if 语句用于控制访问,但在简单场景下可以使用。 ...

2025年6月18日 · 2 分钟 · 浅忆

生产环境对于文件服务注意事项

生产环境对于文件服务,尤其是对外提供访问的场景,需要注意以下几点,以防止伪装文件被解析执行等安全风险,从而被黑产利用上传恶意文件,如上传 html 作为钓鱼、菠菜、跳转 进行传播,利用你的域名当作跳板,导致域名封、通报、用户上当受骗等问题。 ...

2025年2月7日 · 2 分钟 · 浅忆