前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >404 Not Found 探秘Nginx转发处理流程

404 Not Found 探秘Nginx转发处理流程

作者头像
翎野君
发布2023-05-12 19:49:37
3750
发布2023-05-12 19:49:37
举报
文章被收录于专栏:翎野君翎野君

一、问题描述

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

代码语言:javascript
复制
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端口对应的进程

代码语言:javascript
复制
netstat -lntp|grep 80  
tcp        0      0 0.0.0.0:1080                0.0.0.0:*                   LISTEN      18107/nginx

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

代码语言:javascript
复制
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 观察自己的请求信息

代码语言:javascript
复制
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 找到了如下信息
代码语言:javascript
复制
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端口

代码语言:javascript
复制
upstream proxy_phihome_app_download{
          server 192.168.71.20:5007;
}

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

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

代码语言:javascript
复制
[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位置进行观察

代码语言:javascript
复制
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文件
  • 打开看看 哇哦,豁然开朗,它将请求交给了项目应用处理了
代码语言:javascript
复制
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 让我们看看为啥没有找到上面那个路径

代码语言:javascript
复制
[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

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

代码语言:javascript
复制
[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了,真想抽自己两个大嘴巴子!

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

代码语言:javascript
复制
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" "-"
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、问题描述
    • 访问一个链接地址后报404 Not Found nginx/1.10.2
    • 二、探秘问题
      • 1.我们需要先找到nginx的配置文件
        • 2.拿进程号18107查对应进程信息
          • 3.每一次请求都会记录到一个叫做access.log的文件中,寻找它在哪里
            • 4. tail -f /var/log/nginx/access.log 观察自己的请求信息
              • 5. 寻找请求进来之后是如何进行转发的
                • 5.2 根据proxy_pass可知它并没有将请求立即交给项目应用而是转了一下,我们看一下转到哪里去了,发现他将请求转到了71.20机器上的5007端口
                  • 6. 登录71.20端口进行继续进行探究
                    • 6.1 登录上去之后发现是web02test 找5007端口
                      • 6.2 发现居然又是ng进行 what fuck!
                        • 6.3 进入到nginx.conf找转发 没有找到但是发现
                          • 6.4 让我们看看为啥没有找到上面那个路径
                          • 三、解决问题
                            • 原来软连接HEAD被我误写成HAED了,真想抽自己两个大嘴巴子!
                              • 改过来后在进行请求,成功!
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档