前置知識
單頁應用程式(SPA - single page application)
只在第一次載入頁面時,返回唯一的html頁面和它的公共靜態資源,後續的頁面跳轉都不會從服務端拿html檔。 (hash與history路由實作瀏覽器url變化而不刷新頁面)hash路由
範例:www.baidu.com/#/home, 原本hash是用來結合錨點實現頁面試圖的控制,當#後面的值改變時不會重新請求頁面,主要透過window的onhashchange方法來實現。history路由
相比於hash路由,最直觀的變化就是路由中沒有#,透過呼叫window.history物件上的一系列方法來實現頁面的無刷新跳轉(pushState、replaceState)。
history模式下,因為url改變了,此時如果手動刷新頁面,瀏覽器認為是請求一個新的頁面(發起新的Http請求),而新的頁面是不存在的(後端未配置的話),導致404。
先簡述一下在瀏覽器上輸入IP或網域後發生的事情(有點面試題的味道了嗷????),按下回車之後,瀏覽器發出的http去請求html文件,在透過一系列的轉送和尋址解析後,被目標IP所在伺服器上的80埠(預設)接收,這個時候,問題來了哈,伺服器的80介面拿到Http請求後,它不知道要去回傳什麼,這個時候就需要Nginx進行靜態資源代理,告訴伺服器回傳什麼靜態檔
Nginx
對於一般的專案部署,我們需要處理nginx. conf設定檔
該文件,需要知道的如下
.... # http 是指令块,针对http网络传输的一些指令配置 http { #文件扩展名与文件类型映射表 include mime.types; #设置客户端与服务端请求的超时时间 keepalive_timeout 65; # 开启压缩功能,目的:提高传输效率,节省带宽 gzip on server { #监听端口 listen 80; #服务命名,最好就是用这个服务器的域名命名 server_name localhost; #指令块,配置外部访问资源和实际资源的对应关系 location /{ root /usr/blog; #表示静态资源所在的目录 index index.html index.htm; #访问这个路径对应的默认静态资源文件或者网页 } } }
location
#語法
location [=|~|~*|^~|@] uri { ... } location @name { ... }
- ##=:表示精確匹配
- #~:表示區分大小寫正規符合
- ~*:表示不區分大小寫正規符合
- ^~:表示URI 以某個常規字串開頭
- !~:表示區分大小寫正規不符合 ##!~*:表示不區分大小寫正則不匹配
- /:通用匹配,任何請求都會匹配到
- 常用匹配規則
# 将所有请求直接转发给服务器的9090端口 location = / { proxy_pass http://127.0.0.1:9090/; } # 目录匹配 location ^~ /static/ { root /webroot/static/; } # 后缀匹配 location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/; } # 将/account/开始的请求转发给Account服务器 location /account/ { proxy_pass http://127.0.0.1:8080/ } # 将/order/开始的请求转发给Order服务器 location /order/ { proxy_pass http://127.0.0.1:9090/ }
root 與alias
兩者差別在於nginx 如何解釋location 後面的url
[root]語法:root path[alias]預設值:root html
設定段:http、server、location、if
處理結果:root 路徑+ location 路徑
語法:alias path設定段:location
處理結果:使用alias 路徑替換location 路徑# 返回/www/root/html/t/a.html的文件 location ^~ /t/ { root /www/root/html/; } # 返回/www/root/html/new_t/a.html的文件 # 把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。 location ^~ /t/ { alias /www/root/html/new_t/; }解決刷新後出現404的問題
由上面的知識可以知道,刷新後,瀏覽器根據目前的url去請求html文件,但是SPA只有一個html文件,所以需要在nginx.conf的對應location裡配置一行代碼
try_files $uri $uri/ /index.html; 告訴nginx如果按順序檢查檔案是否存在,若不存在則重定向到index.html檔案
以上是Nginx怎麼解決history模式下頁面重新整理404問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

NGINX適合處理高並發和靜態內容,Apache適用於動態內容和復雜URL重寫。 1.NGINX採用事件驅動模型,適合高並發。 2.Apache使用進程或線程模型,適用於動態內容。 3.NGINX配置簡單,Apache配置複雜但更靈活。

NGINX和Apache各有優勢,選擇取決於具體需求。 1.NGINX適合高並發,部署簡單,配置示例包括虛擬主機和反向代理。 2.Apache適用於復雜配置,部署同樣簡單,配置示例包括虛擬主機和URL重寫。

NGINXUnit的目的是簡化Web應用程序的部署和管理。其優勢包括:1)支持多種編程語言,如Python、PHP、Go、Java和Node.js;2)提供動態配置和自動重載功能;3)通過統一的API管理應用生命週期;4)採用異步I/O模型,支持高並發和負載均衡。

NGINX始於2002年,由IgorSysoev開發,旨在解決C10k問題。 1.NGINX是高性能Web服務器,基於事件驅動的異步架構,適用於高並發。 2.提供反向代理、負載均衡和緩存等高級功能,提升系統性能和可靠性。 3.優化技巧包括調整worker進程數、啟用Gzip壓縮、使用HTTP/2和安全配置。

NGINX和Apache在架構上的主要區別在於:NGINX採用事件驅動、異步非阻塞模型,而Apache使用進程或線程模型。 1)NGINX通過事件循環和I/O多路復用機制高效處理高並發連接,適合靜態內容和反向代理。 2)Apache採用多進程或多線程模型,穩定性高但資源消耗大,適合需要豐富模塊擴展的場景。

NGINX適合處理高並發和靜態內容,Apache則適用於復雜配置和動態內容。 1.NGINX高效處理並發連接,適合高流量場景,但處理動態內容需額外配置。 2.Apache提供豐富模塊和靈活配置,適合複雜需求,但高並發性能較差。

NGINX和Apache各有優劣,選擇應基於具體需求。 1.NGINX適合高並發場景,因其異步非阻塞架構。 2.Apache適用於需要復雜配置的低並發場景,因其模塊化設計。

NGINXUnit是一個開源應用服務器,支持多種編程語言,提供動態配置、零停機更新和內置負載均衡等功能。 1.動態配置:無需重啟即可修改配置。 2.多語言支持:兼容Python、Go、Java、PHP等。 3.零停機更新:支持不中斷服務的應用更新。 4.內置負載均衡:可將請求分發到多個應用實例。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

Dreamweaver CS6
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能