zoukankan      html  css  js  c++  java
  • nginx访问不到

    nginx访问不到

    今天,一朋友的一台linux服务器上部署了nginx,但是外部(公网)就是不能访问,于是协助其排查。整体思路如下:

    1、确认nginx配置是否ok。

    2、确认网络是否可达。

    3、是否受防火墙安全控制等。

    4、排除以上原因之后,远程实际再测试。

    那么开始排查:

    1、确认nginx配置是否ok。

    1.1、检查nginx的配置。

    发现有报错

    2013/11/13 15:35:09 [emerg] 7739#0: bind() to 0.0.0.0:80 failed (98: Address already in use)

    netstat -lanp|grep 80

    原来有httpd进程(apache),关闭之

    1.2本机是否可以访问(公网ip)

    本机curl http://12x.xx.x.xx/ 发现是ok的,日志正常打印(access.log有滚动)

    2、确认网络是否可达

    telnet 12x.xx.x.xx 80

    Trying 12x.xx.x.xx...

    Connected to 12x.xx.x.xx.

    Escape character is '^]'.

    这样就说明网络上可达,并且TCP三次握手可以完成,因为能telnet通,排除了网络不通的情况

    3、是否受防火墙安全控制等。

    将iptables和selinux关闭

    以下4条命令清除iptables的配置

    iptables -F

    iptables -F -t nat

    iptables -X

    iptables -X -t nat

    setenforce 0 #关闭selinux

    4、远程访问再次确认和推论

    4.1远程使用浏览器访问,不能访问。。。

    4.2服务器日志没有滚动

    4.3基于4.1和4.2,结论是请求没有到nginx,但是根据,2、网络是可达的。

    似乎矛盾出来了:网络可达,但是80端口的请求就确实没有到nginx。。实际上,网络的可达,或者说telnet能痛,只说明TCP三次握手是ok的,但是流量器不能访问,说明http数据传输受影响。所以,初步判断,是给服务器之前的“某个网络设备”过滤了。

    4.4telnet 之后,直接输入GET /,发现页面能传输回来,但是输入了GET / HTTP/1.1就会被卡死,无任何数据反馈。于是就比较怀疑是服务器之前的“某个网络设备”过滤了(专门过滤http数据)。

    5、我们修改了nginx的监听的端口为8080,发现访问正常了:无论是浏览器还是telnet之后输入GET / HTTP/1.1都ok

    和网络工程师聊了。一般运营商不会过滤80端口的(就算没有icp,一般也不会封)

    【结论】:应该还是在应用层上出问题了,服务器之前的“某个网络设备”过滤了

    经验教训:

    1、排查网站不能访问故障基本思路:内到外一层一层测试,并且要测试网络是否可达,为了便于解决问题,最好将服务器的selinux防火墙关闭。

    2、在我大中华地区,icp备案还是得加上。

  • 相关阅读:
    javascript中的throttle和debounce
    移动端Click300毫秒点击延迟的来龙去脉(转)
    HTTP Keep-Alive详解[转]
    深入浅出requireJS-1
    判断网站是微信打开的
    2015腾讯和阿里前端实习生面试经
    解决ant design 中 select的option 随页面滚动条滚动的bug
    解决window.close()方法兼容各个浏览器(ie关闭会进行弹框提示是否关闭)
    多维数组遍历添加新属性,以及获取所有key
    Vue 路由解耦与快捷新增
  • 原文地址:https://www.cnblogs.com/zhehan/p/7230867.html
Copyright © 2011-2022 走看看