今天,后端过来说有个需求需要前端帮忙,我立即摆谱:“哼,什么问题?”

他连忙跑到我的座位前,窜着手机跟我说:“我发你一个链接,能不能把这些代码放到 hosts 文件里。”

我说:“这是什么?为什么要放。”

经过他的解释,大致是

前端点击一个按钮,调用 API ,后端返回一个 url,url 是第三方链接(后端对接第三方公司返回的链接),因为第三方链接的测试环境需要内网环境才能测试,所以要测试这个产品需要配置 hosts 文件

我的理解是,这个只需要在本机上添加 hosts 文件,让测试添加即可,管我前端什么事!

后来经过拉锯战,他找来技术负责人,负责人亲自讲解,希望我把这些代码放到前端服务器的 hosts 文件中

没办法,说了不听,听了不悦,要我做。官大一级压死人。这里也很有意思,技术人员中,如果你技术真的过硬,听你的,确实没问题,到后面下级还能学到东西。但是如果上级技术一般,这个知识点不是很懂,那么只能试,试就需要成本,这次就是一次成本代价

我在服务器上的 hosts 中添加代码后,网站就访问不了了,nginx 502

我感觉删掉添加的代码,再重启 DNS 服务,结果还是不行

继续搞,搞半天才想起来我的站点部署在 docker 中,启动服务器的 nginx 没用

搞 docker

常用命令

  • docker ps 查看运行的容器
  • docker exec -it containerID /bin/bash 进入指定容器的 docker 服务

先删掉原本的 docker,在手动启动 docker 命令(同事写好的 bash 文件)

直接报错,反向代理不能用字母

1
2
host not found in upstream "XXX.com" in /etc/nginx/conf.d/default.conf:18
nginx: [emerg] host not found in upstream "XXX.com" in /etc/nginx/conf.d/default.conf:18

暂时找不到原因,先改,改成 ip 后,启动成功,使用

docker exec -it containerID /bin/bash 进入容器中,查看 docker 中的 nginx 和静态文件是否有问题,发现都是最新的,理论上是没问题的

回到服务中,再查看端口占用

ps -ef | grep nginx

有好几个 nginx 的服务是启动的

所以猜想是不是 hosts 文件添加之后,docker 自动被弄坏了,然后我再启动了 nginx,nginx 和 docker 启动的 nginx 冲突,所以即使把 hosts 文件恢复了,因为 nginx 一直启动着,所以 docker 启动的容器一直不能访问

解决方案

简单来说,把服务器中的 nginx 关掉,再重启 docker 容器即可

一、查找 nginx 所占的端口

1
ps -ef | grep nginx

二、杀掉所有的与 nginx 相关的端口

1
kill -9 12782

三、重启 docker 相关容器

1
docker restart f4d

总结

到最后解决方案很简单,但主要是排查能力和对命令的熟悉

这次排查唤起了我对很多 nginx 和 docker 的知识点,明年要对这两块做重新的知识梳理