一、问题描述

访问一个链接地址后报404 Not Found nginx/1.10.2

1
112.95.211.154 - - [08/Mar/2018:15:22:21 +0800] "GET /phihome/qr/?m=phicomm&c=echo&p=r1&s=BZHCA HTTP/1.1" 404 571 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36" "-"

二、探秘问题

1.我们需要先找到nginx的配置文件

查80端口对应的进程

1
2
netstat -lntp|grep 80  
tcp 0 0 0.0.0.0:1080 0.0.0.0:* LISTEN 18107/nginx

2.拿进程号18107查对应进程信息

1
2
3
ps -ef|grep 18107
ps -ef|grep nginx
root 18152 1 0 2017 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf

3.每一次请求都会记录到一个叫做access.log的文件中,寻找它在哪里

  • 进入到nginx的配置文件或者在目录中grep access.log *
  • 发现在http 标签下面的 access_log /var/log/nginx/access.log main;

4. tail -f /var/log/nginx/access.log 观察自己的请求信息

1
112.95.211.154 - - [08/Mar/2018:15:22:21 +0800] "GET /phihome/qr/?m=phicomm&c=echo&p=r1&s=BZHCA HTTP/1.1" 404 571 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36" "-"

发现请求返回的是404

5. 寻找请求进来之后是如何进行转发的

5.1 先定位location 按照请求中的phihome作为条件进行查找 当然也有可能配置成phihome/qr 找到了如下信息

location /phihome/qr {
proxy_pass http://proxy_phihome_app_download;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect http:// $scheme://;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

5.2 根据proxy_pass可知它并没有将请求立即交给项目应用而是转了一下,我们看一下转到哪里去了,发现他将请求转到了71.20机器上的5007端口

upstream proxy_phihome_app_download{
server 192.168.71.20:5007;
}

6. 登录71.20端口进行继续进行探究

6.1 登录上去之后发现是web02test 找5007端口

1
2
3
4
[root@web02test ~]# netstat -lntp|grep 5007
tcp 0 0 0.0.0.0:5007 0.0.0.0:* LISTEN 1995/nginx
[root@web02test ~]# ps -ef|grep 1995
root 1995 1 0 2017 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf

6.2 发现居然又是ng进行 what fuck!

重复上述步骤 找到access.log位置进行观察

1
192.168.71.15 - - [08/Mar/2018:16:12:58 +0800] "GET /phihome/qr/?m=phicomm&c=echo&p=r1&s=BZHCA HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36" "112.95.211.154"

6.3 进入到nginx.conf找转发 没有找到但是发现

  • include /etc/nginx/conf.d/*.conf;
  • 进入到conf.d目录搜索grep phihome * 找到了nginx_phihome_app_download.conf文件
  • 打开看看 哇哦,豁然开朗,它将请求交给了项目应用处理了
1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 5007;
server_name localhost; location / {
root /data/deploy/static/com.phicomm.smarthome.phihome/phihome-download-web/HEAD/;
} location = /50x.html {
root /data/thinkphp/Public;
} }

6.4 让我们看看为啥没有找到上面那个路径

1
2
[root@web02test conf.d]# cd /data/deploy/static/com.phicomm.smarthome.phihome/phihome-download-web/HEAD
-bash: cd: /data/deploy/static/com.phicomm.smarthome.phihome/phihome-download-web/HEAD: No such file or directory

没有找到!进入到父级目录看看

1
2
3
4
5
[root@web02test ~]# cd /data/deploy/static/com.phicomm.smarthome.phihome/phihome-download-web
[root@web02test phihome-download-web]# ll
total 8
lrwxrwxrwx 1 root root 77 Mar 8 15:43 HAED -> /root/deploy/static/com.phicomm.smarthome.phihome/phihome-download-web/www/12
drwxr-xr-x 12 root root 4096 Mar 7 19:53 www

三、解决问题

原来软连接HEAD被我误写成HAED了,真想抽自己两个大嘴巴子!

改过来后在进行请求,成功!

1
112.95.211.154 - - [08/Mar/2018:16:03:35 +0800] "GET /phihome/qr/static/images/echo.png HTTP/1.1" 200 625298 "https://sitresourcehome.phicomm.com/phihome/qr/static/css/index.css?version=1.0" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36" "-"

404 Not Found 探秘Nginx转发处理流程的更多相关文章

  1. nginx转发会 默认忽略 headers 中name带”_”的

    昨天遇到一个很蛋疼的问题,在提供的一个 http api中,有定义了一个"X_AUTH_TOKEN"自定义head,可是请求这个api时带上"X_AUTH_TOKEN&q ...

  2. nginx转发post消息成301了

    刚才开始是:第一次遇到这个问题是因为不支持sslv3 后来测试的时候,是因为没注意https的导致http 301跳转https post请求nginx转发成301了,到时post数据丢失

  3. Apache/nginx转发设置-分布式部署

    Apache转发设置1. Weblogic安装 Weblogic8和Weblogic10默认安装,选择完全安装即可,如果是Weblogic9则选择自定义安装,勾选WebService plugin 2 ...

  4. windows server 2008使用nginx转发API异常解决办法

    公司比较传统,一直使用的JSP做项目,没有遇到过跨域问题. 最近因为公司接到一个微信spa项目,因为考虑到项目需要调用老接口,斗胆选择nginx(1.12.1)做接口转发服务, 开发环境使用的win1 ...

  5. nginx系列5:nginx的请求处理流程

    nginx的请求处理流程 如下图: nginx可以处理来自web(http),Email,TCP/UDP的三类请求. nginx底层使用非阻塞的事件驱动引擎,结合状态机来完成异步通知,其中处理Http ...

  6. 一次悲催的nginx转发白屏经历

    背景 公司还有一个学习平台,由于公网地址问题,所以想用nginx转发一下,首先后端地址访问时没有问题的,一切正常. 用nginx转发后,访问nginx代理地址悲催了,出现了白屏. 排查过程 首先贴出来 ...

  7. 部署Asp.net core & Nginx,通过nginx转发

    部署Asp.net core & Nginx,通过nginx转发 CentOS 7 x64 1.vs2017 建立Asp.net core项目,并发布到目录 2.通过FTP工具,将程序copy ...

  8. nginx转发成功报400 bad request,服务端未收到请求

    nginx转发成功报400 bad request,服务端未收到请求 解决办法: upstream后面不要跟下划线 例如: upstream auth_service{ server 30.4.164 ...

  9. elk-Kibana设置登录认证-通过nginx转发(六)

    一.kibana的登录认证问题 kibana是nodejs开发的,本身并没有任何安全限制,直接浏览url就能访问,如果公网环境非常不安全,可以通过nginx请求转发增加认证,方法如下: tips:ki ...

随机推荐

  1. .NET Entity Framework(EF)使用SqlQuery直接操作SQL查询语句或者执行过程

    Entity Framework是微软出品的高级ORM框架,大多数.NET开发者对这个ORM框架应该不会陌生.本文主要罗列在.NET(ASP.NET/WINFORM)应用程序开发中使用Entity F ...

  2. vector使用注意事项

    1. 需要保存若干同类数据项时,用vector比较方便.不用管理下标,直接push_back即可. 2. 当程序重复执行一段代码时,之前保存数据用的vector需要清空.因为不是按照下标保存的数据,不 ...

  3. 漫游kafka实战篇之搭建Kafka开发环境(3)

    上篇文章中我们搭建了kafka的服务器,并可以使用Kafka的命令行工具创建topic,发送和接收消息.下面我们来搭建kafka的开发环境.   添加依赖   搭建开发环境需要引入kafka的jar包 ...

  4. [转]ASP.NET MVC 5 学习教程:快速入门

    本教程将使用Visual Studio 2013手把手教你构建一个入门的ASP.NET MVC5 Web应用程序.本教程配套的C#源码工程可通过如下网址下载:C#版本源码链接.同时,请查阅 Build ...

  5. NPOI导出Excle

    前端: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" con ...

  6. POJ 2567 Code the Tree &amp; POJ 2568 Decode the Tree Prufer序列

    题目大意:2567是给出一棵树,让你求出它的Prufer序列.2568时给出一个Prufer序列,求出这个树. 思路:首先要知道Prufer序列.对于随意一个无根树,每次去掉一个编号最小的叶子节点,并 ...

  7. Object Slicing in C++

    In C++, a derived class object can be assigned to base class, but the other way is not possible. cla ...

  8. RF中空列表变量不能直接赋至为[]

    RF中空列表正确定义方法为:

  9. shell脚本学习总结06--数学计算

    在bash中可利用let,(())和[]执行基本的操作,高级操作将会使用expr和bc 运算符:+,—,*,/,**(幂) (()) [root@Director ~]# ((c=2**3-9%2)) ...

  10. Codeforces Round #513-ABCD

    ABC现场做出,涨了八十几分吧.D有点思路不知道怎么实现,赛后看题解发现巨简单,想得太复杂了.蓝瘦. A----http://codeforces.com/contest/1060/problem/A ...