NGINX解析未配置域名问题:为何未配置域名仍返回指定内容?
问题原因与解决方案
这是因为Nginx的**默认服务器(default server)**机制在起作用,你的配置本身没有语法错误,但缺少了对未匹配域名的处理规则。
具体原因分析
当Nginx接收到请求时,会根据请求头里的Host字段匹配配置中的server_name。如果找不到完全匹配的server块,Nginx会自动使用第一个定义的server块作为默认服务器来处理该请求。
你的配置里只有一个针对mydomain01.com和www.mydomain01.com的server块,所以访问mydomain02.com时,没有对应的server块匹配,Nginx就会用这个唯一的server块处理请求,自然返回了http://localhost:8080的内容。
修正方案
你可以添加一个专门的默认server块,处理所有未匹配指定域名的请求,比如返回404错误:
http { # 保留原有配置内容... # 添加默认server块,放在所有server块最前面 server { listen 80 default_server; server_name _; # 下划线匹配所有未指定的域名 return 404; # 返回404错误,也可自定义其他响应内容 } # 原有server块 server { listen 80; server_name mydomain01.com www.mydomain01.com; location / { proxy_pass http://localhost:8080; include "../proxy_params.conf"; } } }
这里的关键是给默认server块加上default_server参数,并用server_name _覆盖所有未被其他server块匹配的域名。这样访问mydomain02.com时,就会触发这个默认server块,返回404而非代理到本地服务。
另外,你的hosts文件里127.0.0.1 www.mydomain01.com;后面的分号是多余的,虽然不影响解析,但建议修正为:
127.0.0.1 mydomain01.com 127.0.0.1 www.mydomain01.com 127.0.0.1 mydomain02.com 127.0.0.1 www.mydomain02.com
内容的提问来源于stack exchange,提问作者davidesp
相关产品推荐
相关产品推荐

