404 Not Found 探秘Nginx轉發處理流程


一、問題描述

訪問一個鏈接地址后報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" "-"

nginx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM