参考答案:
在Nginx中,可以通过配置一个默认服务器来处理未定义的服务器名称的请求,并返回一个特定的错误响应(如403、444等)或丢弃这些请求,从而实现阻止未定义的服务器名称处理请求的目的。
可以通过设置一个server
块,监听所有未定义的服务器名称,并返回错误码或自定义响应。
1server { 2 listen 80 default_server; # 将此服务器设置为默认服务器 3 server_name _; # 匹配所有未定义的服务器名称 4 5 return 444; # 直接丢弃请求(Nginx内置444状态码) 6}
default_server
:指定当前server
块为默认服务器,当没有其他server_name
匹配时处理请求。server_name _
:_
是一个特殊的值,用于匹配任何未定义的服务器名称。return 444
:Nginx内置的非标准状态码,用于关闭连接而不发送任何响应。如果想返回HTTP标准的错误状态码,可以使用return 403
。
1server { 2 listen 80 default_server; 3 server_name _; 4 5 return 403; # 返回403 Forbidden状态码 6}
客户端会看到一个标准的403错误响应,而不是直接断开连接。
配置一个空的默认服务器,直接忽略所有请求。
1server { 2 listen 80 default_server; 3 server_name _; 4 5 # 不做任何处理 6 location / { 7 return 444; # 丢弃请求,不返回任何内容 8 } 9}
此配置对未知域名的请求不返回任何响应,直接断开连接,适合拒绝恶意流量。
明确列出允许的域名,对于其他未匹配的请求返回错误。
1server { 2 listen 80 default_server; 3 server_name _; 4 5 return 444; # 拒绝所有未定义的域名 6} 7 8server { 9 listen 80; 10 server_name example.com www.example.com; 11 12 location / { 13 proxy_pass http://backend; 14 } 15}
在这里:
example.com
或www.example.com
会被正常处理。防止滥用:
未定义服务器名称的请求可能是恶意流量,例如爬虫、探测等,丢弃(return 444
)更安全。
默认服务器优先级:
Nginx会优先匹配server_name
,如果没有匹配,则使用default_server
配置。
监听多个端口:
如果需要对多个端口(如80和443)同时进行处理,需要分别设置默认服务器。
最近更新时间:2024-12-23