日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

从前端角度谈谈单页应用的 nginx 配置

發布時間:2023/12/20 HTML 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从前端角度谈谈单页应用的 nginx 配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近有段時間沒搞項目部署了,結果在部署前端項目的時候,訪問頁面路由(不是根路徑),nginx 響應都是 404,直接訪問頁面根路徑,路由跳轉到前端的 404 頁面,排查了半天,這里再總結一下。

1. 路由訪問 404 問題

前端單頁應用路由分兩種:哈希模式和歷史模式。

哈希模式部署不會遇到啥問題,但是一般只用于本地調試,沒人直接部署到生產環境。歷史模式的路由跳轉通過 pushState 和 replaceState 實現,不會觸發瀏覽器刷新頁面,不會給服務器發送請求,且會觸發 popState 事件,進而監聽路由變化渲染相應頁面組件,因此可以實現純前端路由。

需要注意,使用歷史模式的時候,還是有兩種情況會導致瀏覽器發送請求給服務器:

  • 輸入地址直接訪問
  • 刷新頁面

在這兩種情況下,如果當前地址不是根路徑,因為都是前端路由,服務器端根本不存在對應的文件,則會直接導致 nginx 直接響應 404。因此需要在服務器端進行配置:

server {listen 80;server_name www.example.com;location / {root /root/workspace/ruoyi-ui/dist;# history 模式重點就是這里try_files $uri $uri/ /index.html;} }

try_files 的作用就是按順序檢查文件是否存在,返回第一個找到的文件。$uri 是 nginx 提供的變量,指當前請求的 URI,不包括任何參數

當請求靜態資源文件的時候,命中 $uri 規則;當請求頁面路由的時候,命中 /index.html 規則

至于直接訪問頁面根路徑,會跳轉到前端的 404 頁面,這完全是前端路由配置問題。前端路由配置的時候,沒有給根路徑 / 配置規則,而對匹配不到路由的時候,配置了 404 頁面,所以訪問根路徑會重定向到 404 頁面,這個跳轉是前端操作,與 nginx 無關。正常來說,前端路由配置的時候,都會給根路徑 / 加一個匹配規則,例如根路徑重定向到 index 路由,可以確保用戶訪問根路徑可以正常展示頁面。

2. 非根路徑部署訪問 404 問題

此外,在部署的時候不使用根路徑,例如希望通過這樣的路徑去訪問 /i/top.gif,如果直接修改 location 發現還會響應 404:

location /i/ {root /data/w3;try_files $uri $uri/ /index.html; }

這是因為 root 是直接拼接 root + location,訪問 /i/top.gif,實際會查找 /data/w3/i/top.gif 文件

這種情況下推薦使用 alias:

location /i/ {alias /data/w3;try_files $uri $uri/ /index.html; }

alias 是用 alias 替換 location 中的路徑,訪問 /i/top.gif,實際會查找 /data/w3/top.gif 文件

3. 接口請求代理

現在頁面部署成功了,但是接口請求會出錯,這是因為還沒有對接口請求進行代理,下面配置一下:

location ^~ /prod-api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://192.168.31.101:8080/; }

4. 兩點補充

除了匹配請求路徑訪問對應文件之外,還可以配置合理的緩存機制。由于 Webpack 打包會給靜態資源加上哈希值,因此可以合理配置緩存規則,提升用戶體驗:

  • html 文件可以配置協商緩存
  • 靜態資源文件由于帶有哈希,可以配置一年強緩存,提升資源二次加載速度

再注意下 location 的匹配優先級規則:

  • = 表示精確匹配。只有請求的url路徑與后面的字符串完全相等時,才會命中。
  • ^~ 表示如果該符號后面的字符是最佳匹配,采用該規則,不再進行后續的查找。
  • ~ 表示該規則是使用正則定義的,區分大小寫。
  • ~* 表示該規則是使用正則定義的,不區分大小寫。

nginx 的匹配優先順序按照上面的順序進行優先匹配,而且 只要某一個匹配命中直接退出,不再進行往下的匹配

剩下的普通匹配會按照 最長匹配長度優先級來匹配,就是誰匹配的越多就用誰。

nginx 每條規則都要以分號結尾,可以運行 nginx -tc nginx.conf 查看配置規則是否生效

5. 完整的 nginx 配置

server {listen 80;server_name www.example.com;# html 頁面訪問location /ruoyi/ {# 支持 /ruoyi 子路徑訪問alias /root/workspace/ruoyi-ui/dist;# history 模式重點就是這里try_files $uri $uri/ /index.html;# html 文件不可設置強緩存,設置協商緩存即可add_header Cache-Control 'no-cache, must-revalidate, proxy-revalidate, max-age=0';}# 接口請求代理location ^~ /prod-api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://192.168.31.101:8080/;}# 靜態資源訪問location ~* \.(?:css(\.map)?|js(\.map)?|gif|svg|jfif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {# 靜態資源設置一年強緩存add_header Cache-Control 'public, max-age=31536000';} }

6. 總結

單頁應用歷史模式路由,如果不是根路徑,請求服務器都會響應 404,需要在服務器端配置 try_files 按順序進行匹配,其中請求頁面路由命中 /index.html 規則,請求靜態資源命中 $uri 規則。

當頁面部署在子路徑下的時候,使用 root 會拼接 root + location,使用 alias 則是用 alias 替換 location 中的路徑。

前端項目部署的時候,還需要配置接口請求代理。

給 html 文件配置協商緩存,由于靜態資源文件會帶哈希,因此可以給靜態資源文件配置強緩存。

location 匹配的優先級規則注意下。

參考

前端到底用nginx來做啥

一份簡單夠用的 Nginx Location 配置講解

總結

以上是生活随笔為你收集整理的从前端角度谈谈单页应用的 nginx 配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: h视频免费在线观看 | 国产精品mm| 丰满少妇一级 | 久久91亚洲 | 黄色不打码视频 | 国产成人一区二区在线 | 国产一区二区视频免费在线观看 | 新红楼梦2005锦江版高清在线观看 | 国产又粗又猛又爽又黄的视频一 | 午夜剧场福利 | 色人阁视频 | 一级片一区二区三区 | 欧美视频在线观看免费 | 亚洲九九热 | 91大神精品在线 | 国产特黄大片aaaa毛片 | 性大片潘金莲裸体 | 久久人体视频 | www欧美| 熟睡侵犯の奶水授乳在线 | 中文字幕91爱爱 | 亚洲色欧美| 今天高清视频在线观看视频 | 国产黑丝一区 | 亚洲精品国产电影 | 法国空姐电影在线观看 | 欧美另类高清videos的特点 | 国内成人免费视频 | 日鲁鲁| 亚洲一区中文字幕永久在线 | 狠狠做深爱婷婷久久综合一区 | 久久激情小说 | 欧美激情一二三区 | 日韩激情文学 | www.国产麻豆 | 亚洲www啪成人一区二区麻豆 | 欧美视频三区 | 欧美一级爱爱视频 | 欧美成人aaa | 久久激情网 | free欧美性69护士呻吟 | 欧美两根一起进3p做受视频 | 女人脱下裤子让男人捅 | 国产午夜亚洲精品午夜鲁丝片 | 黄色在线视频播放 | 欧美成人自拍 | 国产夫妻自拍小视频 | 欧美黄色成人 | 亚洲电影在线观看 | 青春草在线视频免费观看 | 天天干天天操天天插 | 成人免费黄色小视频 | 黄色69| 主播福利在线 | sm捆绑调教视频 | 啪啪的网站 | 国产又黄又粗又猛又爽的视频 | av中文在线观看 | 国色天香网站 | 国产美女精品人人做人人爽 | 欧美精品性视频 | 白白色在线播放 | 天天视频污 | 国产精品久久亚洲 | 波多野吉衣av在线 | 久久精品一区二区三区黑人印度 | 日韩免费高清一区二区 | 三级无遮挡 | 黄色片网站国产 | 亚欧洲精品视频在线观看 | 国产区精品在线观看 | 午夜色图| 神秘马戏团在线观看免费高清中文 | 亚洲色欧美另类 | 欧美在线a| 久久久久久天堂 | 哪里可以免费看毛片 | 欧美亚洲精品天堂 | 蜜桃久久久aaaa成人网一区 | 在线观看国产一级片 | 极品人妻一区二区三区 | 国产成人精品免费在线观看 | 成人爱爱免费视频 | 日韩中文字幕一区二区三区四区 | 国产精品欧美综合 | 五月天激情小说 | 一级黄色在线观看 | 国产一区导航 | 欧美 日韩 人妻 高清 中文 | 日韩图片区 | 精品一区二区三区人妻 | 天天草av| 免费大片在线观看www | 免费无码国产精品 | 最近最经典中文mv字幕 | 激情av中文字幕 | 亚洲欲 | 黄色录像片子 | 久久久久99精品成人片 |