nginx配置報404問題排查解決
前言
今天遇到一個問題,問題是這樣的,我們開發(fā)了一個對接項目,我們會給對接方一個通知的url,以通知我們訂單的變更,但是我們給的通知url是線上的,測試環(huán)境的配置并沒有給對方,并且對方沒有測試環(huán)境,所以只能用線上測試。
我們代碼開發(fā)完畢后,想測試通知接口,但想著通知他們把線上接口更改成測試環(huán)境,流程比較復雜,以后版本上線還得切換成線上環(huán)境,多此一舉。所以我們想到用nginx做反向代理。
由于我們線上環(huán)境nginx 配置比較復雜,我就簡化寫下當時的nginx配置:
測試環(huán)境:
server { listen 80; server_name test.xxxxx.cn location /notice { include proxy.conf; proxy_pass http://127.0.0.1:8899; } }
生產環(huán)境:
server { listen 80; server_name www.xxxxx.cn location /notice { include proxy.conf; proxy_pass http://test.xxxxx.cn; } }
這樣我們在訪問www.xxxxx.cn/notice 的時候一直報404,根據(jù)nginx訪問日志查,我們看到生產環(huán)境域名的access.log 是有記錄,而且返回404,但測試環(huán)境域名的access.log并沒有日志。
一開始我們以為是不是斜杠拼錯了,排查了許久,但發(fā)現(xiàn)也不是,下篇我會再講一下nginx使用斜杠注意事項。
后面找了下架構師,姜還是老的辣,才查出問題出在哪里。
nginx將請求的標頭字段"Host",也就是
藍色部分,以確定應將請求路由到哪個服務器,如果它的值不匹配任何服務器名稱,或者請求根本不包含這個頭字段,那么 nginx 將把請求路由到這個端口的默認服務器。
在上面的配置中訪問www.xxxxx.cn/notice,請求到生產的時候,由于生產環(huán)境配置 server_name www.xxxxx.cn所以可以請求到,但是代理到test.xxxxx.cn時候因為請求中的Host還是www.xxxxx.cn,所以在測試環(huán)境的nginx并沒有匹配到www.xxxxx.cn server_name,所以返回404。
那解決方案就是配置Host
生產環(huán)境:
server { listen 80; server_name www.xxxxx.cn location /notice { include proxy.conf; proxy_set_header Host test.xxxxx.cn; proxy_pass http://test.xxxxx.cn; } }
具體文檔可以參考:
https://nginx.p2hp.com/en/docs/http/request_processing.html
好了,問題就這樣結束了,關注我,下次分享更多的線上問題以及解決方案。
總結
到此這篇關于nginx配置報404問題排查解決的文章就介紹到這了,更多相關nginx配置404解決內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Nginx安裝lua-nginx-module模塊的方法步驟
ngx_lua_module 是一個nginx http模塊,這篇文章主要介紹了Nginx安裝lua-nginx-module模塊的方法步驟,非常具有實用價值,需要的朋友可以參考下2018-12-12利用nginx+lua+redis實現(xiàn)反向代理方法教程
這篇文章主要給大家介紹了利用nginx+lua+redis實現(xiàn)反向代理方法教程,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-05-05Nginx下支持Thinkphp URL Rewrite的配置示例
這篇文章主要介紹了Nginx下支持Thinkphp URL Rewrite的配置示例,本文直接給出配置示例,需要的朋友可以參考下2015-07-07nginx could not build the server_names_hash 解決方法
服務器名字的hash表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size所控制的。2011-03-03Nginx?502?Bad?Gateway錯誤解決詳細指南與實例
這篇文章主要介紹了Nginx?502?Bad?Gateway錯誤解決的相關資料,502BadGateway錯誤是Web開發(fā)和運維中常見的錯誤,表示一個服務器在充當網關或代理時,從上游服務器收到了一個無效的響應,需要的朋友可以參考下2024-11-11