欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文詳解nginx中的root與alias

 更新時(shí)間:2023年11月23日 15:13:08   作者:水電費(fèi)嘎嘎  
Nginx是一款流行的高性能Web服務(wù)器和反向代理服務(wù)器,這篇文章主要給大家介紹了關(guān)于如何通過(guò)一文詳解nginx中的root與alias的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

nginx版本: 1.18.0

1. 結(jié)論

location命中后

如果是root,會(huì)把請(qǐng)求url的 ip/域名+port替換為root指定的目錄,訪問(wèn)資源

如果是alias,會(huì)把請(qǐng)求url的ip/域名+port+匹配到的路徑替換為alias指定的目錄,訪問(wèn)資源

2. 詳解root

2.1 基本用法

以請(qǐng)求http://example.com/foo/bar/hello.html 為例,location配置如下

location /foo {
    root /home/hfy/;
}

匹配到/foo,url的域名+port替換為root指定的目錄,即url中的examp.com被替換為了/home/hfy,所以實(shí)際訪問(wèn)的路徑為/home/hfy/foo/bar/hello.html

為了更好理解,再來(lái)一個(gè)例子,請(qǐng)求的url不變,location配置更改為

location /foo/bar {
    root /home/hfy/;
}

匹配到/foo/bar,url的域名+port替換為root指定的目錄,即url中的examp.com被替換為了/home/hfy,所以實(shí)際訪問(wèn)的路徑仍然為/home/hfy/foo/bar/hello.htmlroot在替換時(shí)不會(huì)替換匹配到的路徑。

2.2 location的最左匹配原則

location會(huì)從url最左邊的路徑匹配,如果一致則命中該location。只有中間匹配到不會(huì)命中。

比如請(qǐng)求的url為http://example.com/foo/bar/hello.html ,location為

location /bar {
    root /home/hfy/;
}

不會(huì)命中該location,因?yàn)閺膗rl中的/foo開(kāi)始匹配,與location /bar不一致,不會(huì)命中,如果url更改為http://example.com/bar/hello.html 才會(huì)命中該規(guī)則

2.3 index

在location內(nèi)部其實(shí)默認(rèn)配置了一條規(guī)則index index.html,補(bǔ)全后的規(guī)則如下

location /foo {
    root /home/hfy/;
    index index.html;
}

假設(shè)我們?cè)L問(wèn)的url為http://example.com/foo/bar ,匹配到/foo,實(shí)際訪問(wèn)的路徑為/home/hfy/foo/bar。如果我們的bar是一個(gè)文件夾,其中如果包含index.html文件,則會(huì)把該文件返回。所以index的作用是,當(dāng)實(shí)際訪問(wèn)的是一個(gè)目錄時(shí),會(huì)返回該目錄中index指定的文件,如果該目錄中不存在index指定的文件,則會(huì)返回403。

在訪問(wèn)http://example.com/foo/bar ,時(shí)我們打開(kāi)瀏覽器的控制臺(tái),查看發(fā)送的請(qǐng)求,會(huì)發(fā)現(xiàn)發(fā)生了一個(gè)301重定向,http://example.com/foo/bar 被重定向?yàn)閔ttp://example.com/foo/bar/ ,由此引發(fā)了新的問(wèn)題,為什么會(huì)發(fā)生重定向,url末尾的/,location 匹配路徑末尾的/,以及root 指定目錄末尾的/都表示什么意思

2.4 nginx location解析url工作流程

經(jīng)過(guò)我的多次測(cè)試,發(fā)現(xiàn)解析url工作流程圖如下

上述的工作流程,假設(shè)了url末尾沒(méi)有加/,如果末尾包含/,解析流程為上圖中綠色部分。例如url為http://example.com/foo/ ,如果foo不存在或者是文件,則直接返回404,如果是foo是目錄,則進(jìn)入到綠色部分流程。如果foo目錄中存在index指定的文件,則返回該文件。如果不存在返回403。從這個(gè)例子可以看出,url末尾加/表示要訪問(wèn)一個(gè)目錄,如果實(shí)際是個(gè)文件,nginx會(huì)返回404。

根據(jù)上述的流程圖,我們看一下2.3中的重定向問(wèn)題,在訪問(wèn)http://example.com/foo/bar 為什么發(fā)生了301重定向。

首先命中如下規(guī)則

location /foo {
    root /home/hfy/;
    index index.html;
}

根據(jù)上述的流程圖,先替換域名+port,實(shí)際訪問(wèn)的路徑為/home/hfy/foo/bar,然后nginx發(fā)現(xiàn)bar不是文件而是個(gè)目錄(文件夾),所以重定向?yàn)榱薶ttp://example.com/foo/bar/ 訪問(wèn)bar這個(gè)目錄中的index.html文件

2.5 末尾’/’

然后再看一下2.3中的另一個(gè)問(wèn)題,末尾的/分別是什么含義

事先聲明,僅是我個(gè)人粗淺的理解,根據(jù)對(duì)不同情況的測(cè)試,嘗試總結(jié) '/'的含義

  • url末尾/的含義

http://example.com/foo/bar 表示我們把bar當(dāng)成一個(gè)文件,想要訪問(wèn)bar文件
http://example.com/foo/bar/ 表示我們把bar當(dāng)成一個(gè)目錄,想要訪問(wèn)bar目錄下index指定的文件

  • location 匹配路徑末尾/的含義
location /foo {
    root /home/hfy/;
    index index.html;
}

/foo 既能匹配http://example.com/foo 也能匹配 http://example.com/foo/

location /foo/ {
    root /home/hfy/;
    index index.html;
}

/foo/只能匹配http://example.com/foo/

  • root 指定目錄末尾/的含義
location /foo {
    root /home/hfy/;
    index index.html;
}

/home/hfy 表示把hfy當(dāng)成目錄或者文件

/home/hfy/ 表示只把hfy當(dāng)成目錄

root后面指定的都應(yīng)該是目錄 (不過(guò)alias有種特殊情況,后面會(huì)提到)

對(duì)于這三個(gè)斜杠,在實(shí)踐中可以有如下使用方案

  • url末尾不加/,如果需要帶/時(shí)依靠nginx自動(dòng)幫我們重定向加/
  • location 路徑不加/,這樣末尾有無(wú)/的url都能匹配到
  • root或者alias指定的目錄后面加/,明確表示root指定的是目錄,增強(qiáng)配置的可讀性

3. 詳解alias

3.1 基本用法

以請(qǐng)求http://example.com/foo/bar/hello.html為例,location配置如下

location /foo {
    alias /home/hfy/;
}

匹配到/foo,url的ip/域名+port+匹配到的路徑替換為alias指定的目錄,即url中的example.com/foo被替換為了/home/hfy,所以實(shí)際訪問(wèn)的路徑為/home/hfy/bar/hello.html

同樣再來(lái)一個(gè)例子,請(qǐng)求的url不變,如果location配置更改為

location /foo/bar {
    alias /home/hfy/;
}

匹配到/foo/bar,url的ip/域名+port+匹配到的路徑替換為alias指定的目錄,即url中的example.com/foo/bar被替換為了/home/hfy,所以實(shí)際訪問(wèn)的路徑為/home/hfy/hello.html。alias在替換時(shí)會(huì)替換匹配到的路徑

alias其余特性,最左匹配、index、location解析url工作流程、末尾’/'與root一致。

4. 特殊情況

4.1 alias指定文件

  • case 1

url http://example.com/foo

/home/hfy/foo是一個(gè)文件

location配置如下

location /foo {
    alias /home/hfy/foo;
}

實(shí)際訪問(wèn)路徑/home/hfy/foo,nginx返回foo文件

這就是上面說(shuō)的特例,alias也可以指定文件,并且正常返回了要訪問(wèn)的文件。但是實(shí)際一般不會(huì)用alias指定文件。

  • case 2

url http://example.com/foo

/home/hfy/foo是一個(gè)文件

location配置如下

location /foo {
    alias /home/hfy/foo/;
}

實(shí)際訪問(wèn)路徑/home/hfy/foo,alias指定 /home/hfy/foo/是一個(gè)目錄,而foo是一個(gè)文件,返回404。

  • case 3
    url http://example.com/foo/

/home/hfy/foo是一個(gè)文件

location配置如下

location /foo/ {
    alias /home/hfy/foo;
}

實(shí)際訪問(wèn)路徑/home/hfy/foo/要訪問(wèn)目錄,alias指定/home/hfy/foo是目錄或文件,而foo是一個(gè)文件,返回了500

  • case 4

url http://example.com/foo/

/home/hfy/foo是一個(gè)文件

location配置如下

location /foo/ {
    alias /home/hfy/foo/;
}

實(shí)際訪問(wèn)路徑/home/hfy/foo/,alias指定/home/hfy/foo/是一個(gè)目錄,而foo是一個(gè)文件,返回了404

  • case 5

url http://example.com/

/home/hfy/foo是一個(gè)文件

location配置如下

location / {
    alias /home/hfy/foo;
}

實(shí)際訪問(wèn)路徑/home/hfy/foo,但是返回了500。

  • case 6

url http://example.com/

/home/hfy/foo是一個(gè)文件

location配置如下

location / {
    alias /home/hfy/foo/;
}

實(shí)際訪問(wèn)路徑/home/hfy/foo,返回404。

4.2 root指定文件

  • case 1

url http://example.com/foo

/home/hfy/foo是一個(gè)文件

location配置如下

location /foo {
    root /home/hfy/foo;
}

實(shí)際訪問(wèn)路徑/home/hfy/foo/foo,不存在,返回404。

  • case 2

url http://example.com/foo

/home/hfy/foo是一個(gè)文件

location配置如下

location /foo {
    root /home/hfy/;
}

實(shí)際訪問(wèn)路徑/home/hfy/foo,返回foo文件。

  • case 3

url http://example.com/foo/

/home/hfy/foo是一個(gè)文件

location配置如下

location /foo {
    root /home/hfy/;
}

location配置如下

location /foo/ {
    root /home/hfy/;
}

實(shí)際訪問(wèn)路徑/home/hfy/foo/要訪問(wèn)目錄,/home/hfy/foo是文件,返回404。

  • case 4

url http://example.com/

/home/hfy/foo是一個(gè)文件

location配置如下

location / {
    root /home/hfy/foo;
}

實(shí)際訪問(wèn)路徑/home/hfy/foo,foo是一個(gè)文件,但是卻返回404。

  • case 5

url http://example.com/

/home/hfy/foo是一個(gè)文件

location配置如下

location / {
    root /home/hfy/foo/;
}

實(shí)際訪問(wèn)路徑/home/hfy/foo,foo是一個(gè)文件,但是卻返回404。

總結(jié)

到此這篇關(guān)于nginx中root與alias的文章就介紹到這了,更多相關(guān)nginx的root與alias內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx配置中指令root和alias的區(qū)別淺析

    Nginx配置中指令root和alias的區(qū)別淺析

    這篇文章給大家主要介紹了Nginx配置中指令root與alias的區(qū)別,文章介紹的很詳細(xì),詳細(xì)對(duì)大家理解root與alias很有幫助,有需要的朋友們下面來(lái)一起看看吧。
    2016-10-10
  • nginx 版本升級(jí)的實(shí)現(xiàn)方法

    nginx 版本升級(jí)的實(shí)現(xiàn)方法

    文介紹了如何在CentOS7服務(wù)器上無(wú)中斷地將Nginx從1.18.0版本升級(jí)到1.19.7版本,提供了兩種升級(jí)方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-09-09
  • Nginx限流和黑名單配置的策略

    Nginx限流和黑名單配置的策略

    這篇文章主要介紹了Nginx限流和黑名單配置,Nginx的限流主要是兩種方式,限制訪問(wèn)頻率和限制并發(fā)連接數(shù),Nginx?按請(qǐng)求速率限速模塊使用的是漏桶算法,即能夠強(qiáng)行保證請(qǐng)求的實(shí)時(shí)處理速度不會(huì)超過(guò)設(shè)置的閾值,感興趣的朋友跟隨小編一起看看吧
    2022-05-05
  • NGINX 配置內(nèi)網(wǎng)訪問(wèn)的實(shí)現(xiàn)步驟

    NGINX 配置內(nèi)網(wǎng)訪問(wèn)的實(shí)現(xiàn)步驟

    本文主要介紹了NGINX 配置內(nèi)網(wǎng)訪問(wèn)的實(shí)現(xiàn)步驟,Nginx的geo模塊限制域名訪問(wèn)權(quán)限,僅允許內(nèi)網(wǎng)/辦公室IP訪問(wèn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-05-05
  • Nginx報(bào)403 forbidden錯(cuò)誤 (13: Permission denied)的解決辦法

    Nginx報(bào)403 forbidden錯(cuò)誤 (13: Permission denied)的解決辦法

    這篇文章主要介紹了Nginx報(bào)403 forbidden錯(cuò)誤 (13: Permission denied)的解決辦法,引起nginx 403 forbidden通常是三種情況:一是缺少索引文件,二是權(quán)限問(wèn)題,三是SELinux狀態(tài)。具體內(nèi)容詳情大家可以參考下本文
    2017-01-01
  • Windows環(huán)境下Nginx?服務(wù)器?SSL?證書(shū)安裝部署操作過(guò)程

    Windows環(huán)境下Nginx?服務(wù)器?SSL?證書(shū)安裝部署操作過(guò)程

    這篇文章主要介紹了Windows環(huán)境下Nginx?服務(wù)器?SSL?證書(shū)安裝部署,指導(dǎo)您如何在Windows Nginx 服務(wù)器中安裝 SSL 證書(shū),本文給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • nginx expires控制頁(yè)面緩存

    nginx expires控制頁(yè)面緩存

    expires 指令可以控制 HTTP 應(yīng)答中的“Expires ”和“ Cache-Control ”的頭標(biāo)(起到控制頁(yè)面緩存的作用)
    2013-01-01
  • Nginx啟動(dòng)成功卻無(wú)法訪問(wèn)網(wǎng)頁(yè)的問(wèn)題分析和解決方案(完整的排除方案)

    Nginx啟動(dòng)成功卻無(wú)法訪問(wèn)網(wǎng)頁(yè)的問(wèn)題分析和解決方案(完整的排除方案)

    我是用的阿里云的服務(wù)器,所以我的問(wèn)題就在于阿里云服務(wù)器必須單獨(dú)開(kāi)端口,在找到這個(gè)問(wèn)題之前,我已經(jīng)把所有能試的方法試過(guò)了一遍都沒(méi)有問(wèn)題,在增加端口之后直接成功了,如果你也遇到了這樣的問(wèn)題,就和我一起排除吧
    2023-12-12
  • nginx php-fpm 小VPS 優(yōu)化

    nginx php-fpm 小VPS 優(yōu)化

    小VPS受系統(tǒng)資源的限制,訪問(wèn)量過(guò)大,超過(guò)系統(tǒng)所能承受的極限時(shí),有一部分請(qǐng)求就會(huì)502了。在系統(tǒng)資源夠用的情況,優(yōu)化nginx,php-fpm,以及系統(tǒng)本身
    2016-05-05
  • nginx+tomcat實(shí)現(xiàn)負(fù)載均衡,使用redis session共享

    nginx+tomcat實(shí)現(xiàn)負(fù)載均衡,使用redis session共享

    這篇文章主要介紹了nginx tomcat負(fù)載均衡 使用redis session共享,有興趣的同學(xué)可以了解一下。
    2016-12-12

最新評(píng)論