首页 > 技术文章 > 启动WNMP 警告报错 nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored 的解决方法

942267027wzmblog 2022-04-08 11:55 原文

在phpStudy_pro中 启动WNMP 出现这个问题,

 

 

虽然说,不影响服务器正常使用的,但是作为程序员,看不惯有 警告“warning”的瑕疵存在……

搜了很多帖子,发现有很多类似的情况出现,有些是在 Linux 下报这样的错,但我的是在集成环境PHPStudy_pro中启动WNMP出现了这样的提醒。

 

【发现问题】 

在部署服务器时,需要按照本地配置进行编写nginx配置文件,

修改nginx配置参数后,使用nginx -t检查配置.

提示successfull后就可以使用 nginx -s reload来重新加载配置

配置的过程中遇到这样的问题,就是绑定了主机名后,重新加载配置时会出现警告

 

nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored

 

意思是重复绑定了server name,但这个警告不会影响到服务器运行。

而且,这个重复绑定的意思是现在运行的nginx服务和将要加载的新配置中的重复,所以,这个警告其实是不必的。

重启nginx时出现如下警告:

nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored

 

【问题原因】

原因是 “localhost” 这个域名出现了两次甚至多次,把同一个域名解析到了不同的目录, 一般将配置文件单独分离出来容易出现这个错误

就是同一个IP或端口号,绑了两三个域名的,要改!

不过这个警告不影响使用,大多数人会忽视它,无视!

 

在给第一个主机设定了default_server的时候,重新加载配置就会出错,

最初就是这个原因,误以为nginx不能在同一ip端口绑定多个域名。

但其实是可以的!!!(我做的在后边,同时一个IP被三个域名解析了:host 、host.ll 、test.ll

一般的办法是杀掉nginx进程重新启动(taskkill-windows下,kill-Linux下),或者先去掉default_server设定,重新加载nginx配置后,再加上,再重新配置。

这个方法比较麻烦,有大牛级别的方法,欢迎留言提供

参考:https://www.shirne.com/blog/linux/nginxxunizhujipeizhibeiwang.html

  

【解决方法】

Linux环境下->命令修改

Linux系统环境下,需要查询出现这个域名的文件,使用grep这个命令

grep -r localhost /*nginx的路径*/conf

找到配置文件的位置再进行配置

cd /usr/local/nginx/conf
vi nginx.conf

#为避免冲突警告尽量避免使用 localhost、127.0.0.1、0.0.0.0等等之类
#server_name  localhost;
 server_name host host.ll test.ll;

修改之后重启即可!!!

 

附:

nginx虚拟主机配置可参考:https://blog.csdn.net/Shiloh_My/article/details/79996426

配置参数的含义可参考:https://blog.csdn.net/qq_37818095/article/details/105515177  (Nginx配置文件 nginx.conf 配置详解)

配置文件的功能注释可参考:https://blog.csdn.net/zhao8848jun/article/details/8254590  (Nginx配置文件功能注释)

有空了,我再自己整理一个Apache的配置文件相关注释

 

Windows环境下->文件编辑

 nginx有个默认的端口检测,如443,80等等,它也会报这个错,因为这端口可能被mysql或者redis或者tomcat,https之类的占了

还有127.0.0.1,0.0.0.0,localhost之类的也不要用,迟早会报错。

打开服务器的配置文件,该修改的修改,按照命名规范来操作,

避免出现冲突!

 打开 vhosts 文件夹:phpstudy_pro\Extensions\Nginx1.15.11\conf\vhosts

找到 0localhost_80.conf 文件,把以前的 “server_name localhost” 注释重写或稍作修改均可:

        #为避免冲突警告尽量避免使用 localhost、127.0.0.1、0.0.0.0等等之类
        #server_name  localhost;
         server_name host host.ll test.ll;

这就是,一个IP同时被三个域名解析了:host 、host.ll 、test.ll

 

最后一步

紧接着,最重要的一步就是:还需要配置linux / win下边的host文件

nginx本地hosts映射

#域名解析IP地址
#本地IP->hosts映射
127.0.0.1 host
127.0.0.1 host.ll
127.0.0.1 test.ll

一个IP同时被三个域名解析的hosts映射:host 、host.ll 、test.ll

 Linux系统和Windows系统是一样的,文件都是hosts,

路径分别是在/etc/hosts  和 C:\Windows\System32\drivers\etc\hosts(通常是被隐藏起来的文件)

 ( 参考:https://www.cnblogs.com/ydymz/p/9542912.html)

 这一步非常非常重要重要!没有这一步,任何除 “localhost 、127.0.0.1”的私人本地地址都不能被访问的到!

很有意思的是,即使你把 baidu.com 映射到127.0.0.1 ,你打开百度网址,也会显示的是本地 测试页面,哈哈哈O(∩_∩)O哈哈哈~(前提是,不能带 www ,带了就会出现访问失败,没权限!域名带www和不带的区别,后续再写一篇

 

 

 

 

 

OK!如此配置完毕,一切正常运行: 不在有弹出warning的弹框 !

测试本地host ,如果使用Google浏览器的话需要把 http 也加入地址中:http:test.ll 

这是避免浏览器自动使用搜索引擎来搜索地址 test.ll ,

 

 测试成功的结果如下(自己写的一个index.html 测试页面,直接访问127.0.0.1:80 <加不加端口号80均可>是直接可以打开本地页面的):

 

 

【小结】

出现这样的问题,就是命名不规范的原因,现在nginx 1.14/15 是警告/报错,以后注意规范自己的命名,不然wran迟早会变成error的。

也提醒我们开发时,要时刻规整自己的习惯,按照规范化标准来要求自己,慢慢养成好习惯,聚沙成塔、集腋成裘,但要避免积重难返!

 

 ---------------------------------------------------------------------------------------------------------------------------------

凡事预则立不预则废,养成复盘总结的微小习惯:改变自己,改变世界,把握当下,把握现在,每天前进1%,享受“复利式成长”!

@Anthony_GM

2022-4-8 11:57:02

推荐阅读