成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

nginx 適配react-router browserRoute 路由問題

codeGoogle / 2091人閱讀

摘要:適配路由問題絕對能用的一篇配置,文末直接有文件,伸手黨直接拿走本文環(huán)境比較復(fù)雜,首先兩層轉(zhuǎn)發(fā),并且訪問路徑也不是根路徑。不對做編碼,因此請求為,可以被規(guī)則匹配到注意是空格。配置錯(cuò)誤解決優(yōu)先級問題后,問題依然存在。導(dǎo)致找不到請求。

nginx 適配react-routerbrowserRoute 路由問題

絕對能用的一篇nginx配置,文末直接有文件,伸手黨直接拿走

本文環(huán)境比較復(fù)雜,首先兩層nginx轉(zhuǎn)發(fā),并且訪問路徑也不是根路徑。加上對nginx一知半解,各路搜索一看,全程懵逼。最終沒有一個(gè)能用的。最后還是靠同事幫助,文檔大法結(jié)束加班。本文知識點(diǎn):location優(yōu)先級,nginx資源文件尋找方式rewrite 重定向問題。

location 優(yōu)先級

= 開頭表示精確匹配

^~ 開頭表示uri以某個(gè)常規(guī)字符串開頭,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為/static/20%/aa,可以被規(guī)則^~ /static/ /aa匹配到(注意是空格)。以xx開頭

~ 開頭表示區(qū)分大小寫的正則匹配???????????????????? 以xx結(jié)尾

~* 開頭表示不區(qū)分大小寫的正則匹配??????????????? 以xx結(jié)尾

!~和!~*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配 的正則

/ 通用匹配,任何請求都會(huì)匹配到。

try_file 使用

當(dāng)用戶請求 http://localhost/example 時(shí),這里的 $uri 就是 /example。
try_files 會(huì)到硬盤里嘗試找這個(gè)文件。如果存在名為 /$root/example(其中 $root 是項(xiàng)目代碼安裝目錄)的文件,就直接把這個(gè)文件的內(nèi)容發(fā)送給用戶。
顯然,目錄中沒有叫 example 的文件。然后就看 $uri/,增加了一個(gè) /,也就是看有沒有名為 /$root/example/ 的目錄。
又找不到,就會(huì) fall back 到 try_files 的最后一個(gè)選項(xiàng) /index.php,發(fā)起一個(gè)內(nèi)部 “子請求”,也就是相當(dāng)于 nginx 發(fā)起一個(gè) HTTP 請求到 http://localhost/index.php。

適配react-router browserrouter配置

首先文件存放路徑是子目錄 /usr/local/services/app_logical_server-1.0/bin/app/screen
訪問路徑是 https://example.com/app/screen/

錯(cuò)誤的nginx 配置
    server {
        listen       8080;
        root  /usr/local/services/app_logical_server-1.0/bin/app/screen;
        location ~* .(gif|jpg|png|js|css)$ {
          root /usr/local/services/app_logical_server-1.0/bin/app/screen/;
        }
        location ^~ /app/screen {
          root   html;
          index  index.html;
          try_files $uri $uri/ /index.html;
        }

    }
錯(cuò)誤點(diǎn)

錯(cuò)誤現(xiàn)象是index.html可以找到,但是index.html中的js寫的是相對路徑,導(dǎo)致所有的靜態(tài)資源文件也進(jìn)入了第二個(gè)location,導(dǎo)致頁面白屏。
分析如下。

1.優(yōu)先級問題

首先匹配 =,其次匹配^~, 其次是按文件中順序的正則匹配,最后是交給 / 通用匹配。當(dāng)有匹配成功時(shí)候,停止匹配,按當(dāng)前匹配規(guī)則處理請求。
~* 的優(yōu)先級低于 ^~所以第一個(gè)配置靜態(tài)資源文件雖然寫在前面,還是不會(huì)進(jìn)去的。

2. server root 配置錯(cuò)誤

解決優(yōu)先級問題后,問題依然存在。原因就是這個(gè)。root 在server和location中都有,都是配置文件開始尋找的根路徑,如果url是https://xxxx:8084/app/screen,location中的配置優(yōu)先級高于server。首先會(huì)進(jìn)入第二個(gè)location中,尋找文件,文件路徑是root和域名后面的路徑的拼接,例如:訪問路徑是 https://example.com/app/screen/umi.js,server root 為 /usr/local/services/app_logical_server-1.0/bin/app/screen。 nginx尋找文件的地址為/usr/local/services/app_logical_server-1.0/bin/app/screen/app/screen/umi.js.當(dāng)然找不到,報(bào)404錯(cuò)誤。

正確的配置
    server {
        listen       8084;
        root  /usr/local/services/app_logical_server-1.0/bin/;
        location ~* .(gif|jpg|png|js|css)$ {
            root  /usr/local/services/app_logical_server-1.0/bin;
        }
        location ~* /app/screen {
          #try_files $uri $uri/ /usr/local/services/app_logical_server-1.0/bin/app/screen/index.html;
          root  /usr/local/services/app_logical_server-1.0/bin;
          try_files /app/screen/index.html =404;
        }
    }
不帶/的url重定向問題

當(dāng)前配置還有個(gè)問題,就是末尾不帶斜杠時(shí),index.html可以加載到,但是html中的資源文件寫的相對路徑,當(dāng)url 為https://example/app/screen時(shí),相對路徑為https://example/app,以js為例,https://example/app/umi.js,所以報(bào)404錯(cuò)誤。
解決方案為,利用location優(yōu)先級,再加一個(gè) = /app/screen 的location 。

    location = /sa/screen {
        rewrite ^([^.]*[^/])$ $1/ permanent;
        port_in_redirect off;
    }

但是到此還沒結(jié)束。因?yàn)闃I(yè)務(wù)需要,本層nginx前面還有一層Nginx。所以301 重定向的時(shí)候,會(huì)帶上端口號。導(dǎo)致找不到請求。port_in_redirect off; 配置可以解決此問題

最終版完美配置

server {
        listen       8084;
        root  /usr/local/services/app_logical_server-1.0/bin/;
        location = /sa/screen {
            rewrite ^([^.]*[^/])$ $1/ permanent;
            port_in_redirect off;
        }
        location ~* .(gif|jpg|png|js|css)$ {
            root  /usr/local/services/app_logical_server-1.0/bin;
        }
        location ~* /app/screen {
          #try_files $uri $uri/ /usr/local/services/app_logical_server-1.0/bin/app/screen/index.html;
          root  /usr/local/services/app_logical_server-1.0/bin;
          try_files /app/screen/index.html =404;
        }
    }

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/106915.html

相關(guān)文章

  • 項(xiàng)目實(shí)踐:從react-router v3遷移到v4

    摘要:詳見對綁定監(jiān)聽事件,把的改變同步到的中用來把的更新同步到中。代碼分割版本通過和實(shí)現(xiàn)代碼分割和動(dòng)態(tài)路由。筆者認(rèn)為,更符合的組件思想,于是做了一個(gè)實(shí)踐。 原文:https://github.com/YutHelloWo... 前言 今年3月初發(fā)布了react-router v4,相較之前的v3和v2版本做了一個(gè)破壞性的升級。遵循一切皆React Component的理念。靜態(tài)路由變成了動(dòng)態(tài)...

    zhangrxiang 評論0 收藏0
  • [ 一起學(xué)React系列 -- 11 ] React-Router4 (1)

    摘要:中的包中的包主要有三個(gè)和。的理念上面提到的理念是一切皆組件以下統(tǒng)一稱組件。從這點(diǎn)來說的確方便了不少,也迎合一切皆組件的理念。組件是中主要的組成單位,可以認(rèn)為是或的路由入口。將該標(biāo)示為嚴(yán)格匹配路由。的屬性追加一條。 2019年不知不覺已經(jīng)過去19天了,有沒有給自己做個(gè)總結(jié)?有沒有給明年做個(gè)計(jì)劃?當(dāng)然筆者已經(jīng)做好了明年的工作、學(xué)習(xí)計(jì)劃;同時(shí)也包括該系列博客剩下的博文計(jì)劃,目前還剩4篇:分別...

    tinysun1234 評論0 收藏0
  • react-router v5.x 源碼分析和理解 SPA router 的原理

    摘要:一般情況下,都是作為等其他子路由的上層路由,使用了,接收一個(gè)屬性,傳遞給消費(fèi)子組件。創(chuàng)建對象,兼容老瀏覽器,其他和沒有大區(qū)別總結(jié)分為四個(gè)包,分別為,其中是瀏覽器相關(guān),是相關(guān),是核心也是共同部分,是一些配置相關(guān)。 這篇文章主要講的是分析 react-router 源碼,版本是 v5.x,以及 SPA 路由實(shí)現(xiàn)的原理。 文章首發(fā)地址 單頁面應(yīng)用都用到了路由 router,目前來看實(shí)現(xiàn)路由有...

    Harriet666 評論0 收藏0
  • React-router v4 路由配置方法

    摘要:使用了約等于才能匹配或者能匹配,所以說是約等于。使用了和才能匹配后續(xù)補(bǔ)充這是版本中新添加,主要用來做唯一匹配的功能。就是想要在眾多路由中只匹配其中一個(gè)路由。 React-Router v4 一. Switch 、Router 、Route三者的區(qū)別 1、Route Route 是建立location 和 ui的最直接聯(lián)系 2、Router react-router v4 中,Route...

    Coding01 評論0 收藏0
  • Router入門0x204: react-route簡單栗子

    摘要:概述這一章仔細(xì)講一講的使用栗子簡單使用源碼簡單使用首頁文章我的首頁文章我的效果帶導(dǎo)航激活效果源碼帶導(dǎo)航效果首頁文章我的首頁文章我的效果說明增強(qiáng)版,如果當(dāng)前路由命中,將會(huì)啟用或者。 0x000 概述 這一章仔細(xì)講一講 react-route 的使用栗子 0x001 簡單使用 源碼 import React from react import ReactDom from react-d...

    番茄西紅柿 評論0 收藏0

發(fā)表評論

0條評論

codeGoogle

|高級講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<