nginx配置server_name后不生效


项目场景:

公司机房搬迁,新环境和外界隔离,系统需要重新搭建,涉及到的服务器资源不足,考虑到国外用户暂时相对教少,一台服务器部署两个项目具有可行性。公司办公网默认解析8080端口,所以nginx需要配置不同server_name,相同端口。


问题描述:

nginx配置中配置了

http{

xxx

server{

xxx;

port 8080;

server_name www.name1.com;

}

server{

xxx;

port 8080;

server_name www.name2.com;

}

}

访问  www.name1.com 或  www.name2.com最终都跳转到了 www.name1.com的前端资源

@Override public void run() { bytes = mmInStream.read(buffer); mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget(); } 

原因分析:

基于nginx对server_name的检测规则,当请求来自 www.name1.com时确实可以被正确解析到第一个server,来自www.name2.com也可以被正确解析到第二个server。但是除此之外的其他请求如果同时不匹配这两者,也会默认访问到配置的第一个server,所以就出现了我出现的问题。


解决方案:

已经定位到了问题出现在非法HOST,基于ngin默认匹配第一个的规则,可以在nginx中第一个配置一个专门针对非法host的server配置。

http{

xxx

server {
   listen 80;
   server_name _;
   
   return 404;
}

server{

xxx;

port 8080;

server_name www.name1.com;

}

server{

xxx;

port 8080;

server_name www.name2.com;

}

}

完美解决

你可能感兴趣的:(nginx配置server_name后不生效)