一、问题描述

访问一个链接地址后报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. Ubuntu的软件更新常识--添加软件源与ppa源

    加入ppa源的命令: sudo add-apt-repository ppa:user/ppa-name 删除ppa源的命令: sudo add-apt-repository -r ppa:user/ ...

  2. maven+springmvc错误 JAX-RS (REST Web Services) 2.0 can not be installed

    项目problem提示错误 JAX-RS (REST Web Services) 2.0 can not be installed : One or more constraints have not ...

  3. python pycurl属性

    pycurl.Curl() #创建一个pycurl对象的方法 pycurl.Curl(pycurl.URL, http://www.google.com.hk) #设置要访问的URL pycurl.C ...

  4. Numpy库解析

    python中的axis 其实问题理解axis有问题,df.mean其实是在每一行上取所有列的均值,而不是保留每一列的均值.也许简单的来记就是axis=0代表往跨行(down),而axis=1代表跨列 ...

  5. URL中?和#的区别(关于SSRF)以及mysql的secure-file-priv

    零,绪论 20180125日,忙! 瞎比比总结一下,来满足这是个日记的样子. 1.今天谈的并不是什么技术[当然也不是没有技术(都很基础)]而是瞎几把扯. 一.关于一种SSRF的检测绕过: 1.背景: ...

  6. 【黑金原创教程】 FPGA那些事儿《概念篇》

    简介一本讲述非软硬片上系统的书,另外还是低级建模的使用手册. 目录[黑金原创教程] FPGA那些事儿<概念篇>:File01 - 结构的玩笑[黑金原创教程] FPGA那些事儿<概念篇 ...

  7. EditText监听方法,实时的判断输入多少字符

    最近在写一个小项目,其中有一点用到了显示EditText中输入了多少个字符,像微博中显示剩余多少字符的功能.在EditText提供了一个方法addTextChangedListener实现对输入文本的 ...

  8. (转)MySQL百万级数据库优化

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  9. 通过SSH连接mysql

  10. Linux压缩解压缩(unzip,tar)

    unzip tar 常用解压缩命令: tar -zxvpf:解压缩 tar -zcvpf: 压缩 # tar [-j|-z] [cv] [-f 建立的檔名] filename... <==打包与 ...