亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網(wǎng)站 > Nginx > 正文

詳解Nginx靜態(tài)服務(wù)配置(root和alias指令)

2024-08-30 12:30:12
字體:
供稿:網(wǎng)友

靜態(tài)文件

Nginx以其高性能著稱,常用與做前端反向代理服務(wù)器。同時nginx也是一個高性能的靜態(tài)文件服務(wù)器。通常都會把應(yīng)用的靜態(tài)文件使用nginx處理。

配置nginx的靜態(tài)文件有兩個指令,一個 root 和一個 alias。對于這兩個指令,是否需要在路徑的后面加上斜杠,經(jīng)常容易讓人犯暈,本文通過嘗試不同的匹配規(guī)則,歸納了一個比較通用的配置方式。

基本配置

與Nginx Location Url一文關(guān)于location url配置的實驗一樣,本文也使用vagrant虛擬機里的nginx。其基本配置如下:

/etc/nginx/sites-enabled/pro.conf

server {    listen 80 default_server;    server_name localhost;    access_log /var/log/nginx/pro/access.log;    error_log /var/log/nginx/pro/error.log;    error_page 404 /404.html;    root /vagrant/pro;    index index.html index.htm;}

項目的目錄如下:

pro tree.├── 403.html├── 404.html├── index.html├── static│  ├── flask│  │  └── m.png│  └── stc.jpg└── upload  └── up.png3 directories, 6 files

分別有兩個靜態(tài)文件夾,一個是static,另外一個是upload。

初識root

root 是指定項目的根目錄,適用與server和location。可以指定多個,如果locaiton沒有指定,會往其外層的server或http中尋找繼承。

訪問http://192.168.33.10/static/stc.jpg 會發(fā)現(xiàn)圖片已經(jīng)返回。我們還尚未配置 location,為啥會正確的找到文件?學(xué)習(xí)root或者alias指令的時候,最好的辦法是給文件拓展名加上一個字符,使得該文件在硬盤中不存在,那么就能從nginx的error.log中看到nginx尋找文件的方式。

訪問 http://192.168.33.10/static/stc.jpgx,然后查看 /var/log/nginx/pro/error.log文件,可以看到如下的錯誤信息:

2016/09/28 07:41:48 [error] 4416#0: *70 open() "/vagrant/pro/static/stc.jpgx" failed (2: No such file or directory), client: 192.168.33.1, server: localhost, request: "GET /static/stc.jpgx HTTP/1.1", host: "192.168.33.10"

即/vagrant/pro/static/stc.jpgx 文件不存在。的確我們沒有這個文件。如果文件名正確,就能訪問,原因是由于在server中指定了root /vagrant/pro,此時的nginx就在該目錄下尋找文件,而url上的地址,正好和文件的路徑一致

 http://192.168.33.10 /static/stc.jpg  /vagrant/pro     /static/stc.jpg

由此可以猜想,nginx中root指令的地址,其實是替換了匹配后的url中的host。

root指令

為了驗證上面的猜想,需要多寫幾個location做實驗。添加一個location配置如下:

location ^~ /static {  root /vagrant/pro/static;}

再次訪問http://192.168.33.10/static/stc.jpg,發(fā)現(xiàn)并不能顯示圖片了,查看error.log 返回如下:

2016/09/28 07:48:57 [error] 5978#0: *71 open() "/vagrant/pro/static/static/stc.jpg" failed (2: No such file or directory), client: 192.168.33.1, server: localhost, request: "GET /static/stc.jpg HTTP/1.1", host: "192.168.33.10"

nginx把地址識別成/vargrant/pro/static/static/stc.jpg多了一個static,套用上面的規(guī)則,其組合為192.168.33.10 == /vagrant/pro/static ,url是/static/stc.jpg。置換可以得到/vagrant/pro/static + /static/stc.jpg。與錯誤的error一致。解決方案就是把root中的static去掉,馬上就能訪問圖片了。

既然是那么把文件夾static命名為stc,其結(jié)果又會怎樣?

location ^~ /static {  root /vagrant/pro;}

訪問 http://192.168.33.10/static/stc.jpg 得到錯誤:

2016/09/28 07:54:46 [error] 5992#0: *73 open() "/vagrant/pro/static/stc.jpg" failed (2: No such file or directory), client: 192.168.33.1, server: localhost, request: "GET /static/stc.jpg HTTP/1.1", host: "192.168.33.10"

計算路徑/vagrant/pro + /static/stc.jpg, 找不到/vagrant/pro/static/stc.jpg文件,符合之前所說的規(guī)則,嘗試修改location:

location ^~ /stc {  root /vagrant/pro;}

因為url變了,訪問http://192.168.33.10/stc/stc.jpg,才能夠找到圖片。現(xiàn)在把stc文件夾變回static。

root 與 斜杠

很多人會疑惑,路徑最后的斜杠/是否要加呢?location中的static后面的斜杠,和匹配后的url有關(guān),不再贅述。root中的路徑的斜杠/可以再通過實驗確定。把location配置如下:

location ^~ /static/ {  root /vagrant/pro/;}

訪問http://192.168.33.10/static/stc.jpg 一切正常,訪問http://192.168.33.10/static/stc.jpg,error為找不到"/vagrant/pro/static/stc.jpgs"文件。

如果按照root替換host的規(guī)則,那么替換過程為

/vagrant/pro/ + /static/stc.jpg == /vagrant/pro//static/stc.jpg。在*nix系統(tǒng)中, 多個斜杠和一個斜杠是等價的,也就是 /vagrant/pro//static/stc.jpg 與/vagrant/pro/static/stc.jpg一樣。

這樣一來,root路徑后面的斜杠,加與不加效果都一樣。既然如此,肯定有人會想到這么配置:

location ^~ static/ {  root /vagrant/pro;}

如果安裝之前上面的即算法,那么應(yīng)該是 /vagrant/pro + static/stc.jpg,相加的應(yīng)該是/vagrant/prostatic/stc.jpg,按理說應(yīng)該是錯誤,可是實際上卻能訪問圖片。咄咄怪事?
如果對前文nginx location的url匹配規(guī)則了解的話,應(yīng)該看出來了其實 ^~ static/并不能匹配。修改 location

location ^~ static/ {  rewrite ^ http://google.com;  # root /vagrant/pro;}

訪問http://192.168.33.10/static/stc.jpg依然可以得到圖片,沒有跳轉(zhuǎn)google,說明并沒有匹配^~ static/。

其實原理也很簡單,還記得我們第一次實驗,當(dāng)時尚未配置location,也同樣可以返回圖片。沒錯,盡管^~ static/沒有匹配,而外層的server定義了root為/vagrant/pro,因此搜索圖片正常返回,再注釋外層的root,再一次訪問。此時會得到一個404,查看error如下:

2016/09/28 08:18:15 [error] 6227#0: *82 open() "/usr/share/nginx/html/static/stc.jpg" failed (2: No such file or directory), client: 192.168.33.1, server: localhost, request: "GET /static/stc.jpg HTTP/1.1", host: "192.168.33.10"

/usr/share/nginx/html/static/stc.jpg,說明即使沒有指定root,nginx默認(rèn)也有一個root,/usr/share/nginx/html。當(dāng)然,這個配置和 ^~ static/沒有關(guān)系。

如果~ static/stc.jpgs? 那么就能命中,此時訪問圖片,依然能夠正確的解析,因此,并不存在 /vagrant/pro + static/stc.jpg這種情況。理解這里的關(guān)鍵是 root替換host,并加上匹配后的url,匹配后的url當(dāng)然包括前面的斜杠,匹配部分的url則不會。
對于 ~ static/stc.jpgs?模式,訪問urlhttp://192.168.33.10/static/stc.jpg

  • 匹配后的url為 /static/stc.jpg
  • 匹配部分的url為  static/stc.jpg

掌握這個很重要,直接關(guān)系到后面alias指令與斜杠的關(guān)系。

對于root指令,我們可以歸納。

  1. 對于匹配后的url地址,將匹配的location中的root路徑替換訪問url的host即得到文件的真實地址。(多個斜杠其實等價于一個斜杠)
  2. 如果不匹配location,則尋找更外層的root做替換。
  3. root指令最后的斜杠可加可不加。

alias指令

對于root,操作上很簡單,只要把root地址替換host后就是文件在硬盤路徑(真實地址)。對于alise,它并不是替換匹配后的url地址,而是替換匹配部分的url。alias指令也可以有多個。
添加一個location,和root的方式幾乎一樣:

location ^~ /upload {  alias /vagrant/pro;}

訪問http://192.168.33.10/upload/up.png并沒有圖片,查看error得到:

2016/09/28 08:36:18 [error] 6312#0: *90 open() "/vagrant/pro/up.png" failed (2: No such file or directory), client: 192.168.33.1, server: localhost, request: "GET /upload/up.png HTTP/1.1", host: "192.168.33.10"

可見 alias的模式并不是/vagrant/pro + /upload/up.png,而是 /vagrant/pro + /up.png。

alias這個詞在計算機里很常用,字面意思是“別名”,顧名思議就是換一個名字啦。實際替換規(guī)則就是把匹配的url地址,換成alias中的路徑即可。例如上述的例子替換過程可以模擬如下:

 

過程 模式或url
url模式 ^~ /upload
alias路徑 /vagrant/pro
訪問地址 http://192.168.33.10/upload/up.png
匹配部分的地址 /upload + /up.png
替換 /upload == /vagrant/pro
結(jié)果 /vagrant/pro + /up.png

 

為了修改圖片的訪問,修改locaton如下:

location ^~ /upload {  alias /vagrant/pro/upload;}

此時訪問http://192.168.33.10/upload/up.png就能得到正確的圖片啦,仿造上面的計算過程為:

 

過程 模式或url
url模式 ^~ /upload
alias路徑 /vagrant/pro/upload
訪問地址 http://192.168.33.10/upload/up.png
匹配部分的地址 /upload + /up.png
替換 /upload == /vagrant/pro/upload
結(jié)果 /vagrant/pro/upload + /up.png

 

從結(jié)果可以看出,正確的找到了文件路徑,如果alias指令路徑加上斜杠,那么計算處理的文件路徑為:

/upload == /vagrant/pro/upload/vagrant/pro/upload/ + /up.png

多個斜杠是合法的。等價于一個斜杠的情況。

下面修改locaiton如下:

location ^~ /upload/ {  alias /vagrant/pro/upload;}

此時匹配時的url則變成  /upload/ + up.jpg, 那么置換的結(jié)果為 /vagrant/pro/upload + up.png,而/vagrant/pro/uploadup.png的路徑是非法的,從error中也能看到置換的錯誤:

2016/09/28 08:52:44 [error] 6452#0: *92 open() "/vagrant/pro/uploadup.png" failed (2: No such file or directory), client: 192.168.33.1, server: localhost, request: "GET /upload/up.png HTTP/1.1", host: "192.168.33.10"

解決辦法也很簡單,把/vagrant/pro/upload 改成 /vagrant/pro/upload/即可。由此可見,alias最后的斜杠并不像root指令那樣可有可無,是否需要,取決于配合loacation的url匹配模式。

前文root模式中,考慮了沒有根的斜杠(~ static/stc.jpgs?)這種情況,alias情況下會很難捕捉錯誤。如果locaion配置如下:

location ^~ upload/ {   alias /vagrant/pro/upload/;}

替換置換的文件路徑應(yīng)該為 /vagrant/pro/upload/up.png,可是實際測試中,這樣配置alias,會一直導(dǎo)致一個301的重定向,如果alias目錄沒有打開autoindex,則會拋出一個403錯誤。具體情況尚未知曉,不知道是不是nginx的bug。為了避免這種情況,使用alias的時候,盡量不要配置location為 ^~ upload/的模式,并且不從根指定url,還是顯得不倫不類。

alise作為別名,比起root的一大好處就是不一定要url上的路徑和文件路徑一樣,因為alise并不是替換host,而是替換匹配部分的host。修改配置如下:

location ^~ /upload/ {  alias /vagrant/pro/static/;}

訪問 http://192.168.33.10/upload/stc.jpg或者 http://192.168.33.10/upload/flask/m.png都能正確的訪問到static目錄下的文件,盡管url上是upload。

替換規(guī)則也很簡單,/upload/ == /vagrant/pro/static/ 得到 /vagrant/pro/static/ + stc.jpg 或 /vagrant/pro/static/ + flask/m.png。

總結(jié)

nginx的靜態(tài)文件配置中,root和alias指令都能實現(xiàn)。為了避免混淆,盡量不要寫沒有根路徑的url模式,即避免  static/這樣的開頭,根路徑的斜杠需要保留,沒有根路徑其實也很奇怪。

root和alias的區(qū)別主要在于替換的部分,root模式中,會把root配置的路徑替換匹配后的url中的host。alias則把他指定的路徑,替換url中匹配的部分。指令中的斜杠對于root指令沒有影響,對于alise則按照替換規(guī)則匹配即可。

root 指令

location /dir/ root root_path -> http://host/dir/file.txt -> root_path/dir/file.txt

alias 指令

location /diralias alias_path -> http://host /dir /file.txt -> alias_path/file.txtlocation /dir/ alias alias_path/ -> http://host /dir/ file.txt -> alias_path/file.txt

了解了root和alise之后,通常最佳實際是配置一個項目的根root,其他的文件夾則使用alias,畢竟alias更加靈活。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到服務(wù)器教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲小说区图片区| 欧美色男人天堂| 99国产一区| 日本福利午夜视频在线| 国产精品天天av精麻传媒| 欧美日韩精品免费观看视频完整| 色视频www在线播放| 日韩精品社区| 少妇人妻互换不带套| 午夜在线激情影院| 精品久久久久久久久久岛国gif| 不许穿内裤随时挨c调教h苏绵| 经典三级一区二区三区视频| 好吊视频一二三区| 国产精品二区二区三区| 成人免费视频毛片| 成人欧美一区二区三区视频网页| 久久99精品国产麻豆不卡| 在线观看日韩欧美| 欧美精品视频www在线观看| 91精品一区二区三区在线观看| 日本网站免费在线观看| 国产视频在线观看一区| 精品国产乱码久久久久久牛牛| 日韩中文字幕精品视频| 免费成人av网站| 国产三级视频在线播放线观看| 五月天亚洲一区| 亚洲综合社区网| 热re99久久精品国产66热| 成人动漫一区二区三区| 神马电影在线观看| 99色在线观看| 高清无码一区二区在线观看吞精| 国内精品久久久久久久久久久| 天天干天天操天天操| 91av在线网站| 国产不卡视频一区二区三区| 男女男精品视频网站| 老司机精品导航| 懂色av一区二区在线播放| 伊人久久大香线蕉成人综合网| 日本欧美久久久久免费播放网| 亚洲va欧美va国产综合剧情| 亚洲色图自拍| 啊灬啊灬啊灬啊灬高潮在线看| 国产精品日韩一区二区免费视频| 不卡视频免费播放| 色婷婷综合久久| 一级淫片在线观看| 欧美久久久久久久久久| 久草免费在线视频| 91视频网页| 少妇久久久久久被弄到高潮| a级影片在线| 欧美久久久久久久久| 日韩在线电影| 中文字幕另类日韩欧美亚洲嫩草| 久久乐国产精品| 日韩在线视频播放| 青草国产精品| 欧美三级一区二区三区| 91插插插插插插插插| 精品久久久久一区二区国产| 精品久久久免费视频| 狠狠插狠狠操| 福利视频一区二区三区| 中文字幕一区二区三区在线播放| 天天综合网日韩| 色琪琪免费视频网站| 日本午夜视频| 影音先锋国产资源| 一级成人黄色片| 日韩午夜激情| 亚洲成人av电影| 国产欧美日韩精品在线| 精品国产aⅴ| 日本不卡在线观看| 又黄又爽的网站| 蜜桃精品久久久久久久免费影院| 国模极品一区二区三区| 久久久成人av毛片免费观看| 国产精品爽黄69天堂a| 特级西西444www大精品视频| 国产不卡一区二区三区在线观看| 国产精品女人久久久久久| 精品国产一区二区三区麻豆免费观看完整版| 国产精品无码乱伦| 天堂8中文在线| 日韩伦人妻无码| 国产熟女一区二区| 久久人人爽人人爽人人片av免费| 欧美日韩高清一区二区不卡| 一本到不卡精品视频在线观看| 亚洲精品色图| 亚洲色偷偷综合亚洲av伊人| 欧美高清精品3d| 日韩欧美不卡一区| 91精品婷婷国产综合久久蝌蚪| 懂色av一区二区三区在线播放| 国产男人搡女人免费视频| 污视频在线看网站| 日韩av在线中文字幕| 九一国产在线| 欧美日韩综合一区二区三区| 2014国产精品| 精品国产网站在线观看| 国产情侣在线视频| 黑人巨大xxx| 国产在线观看无码免费视频| 91免费精品| 欧美精品少妇一区二区三区| 久久久久久久色| 国产在线一区不卡| 色综合视频一区中文字幕| 欧美丝袜丝交足nylons图片| 亚洲精品自拍第一页| 丰满少妇乱子伦精品看片| 欧美一区二区| 久久久久亚洲AV成人无在| 国产精品美女久久久久久久久| 日本加勒比高清在线| 亚洲三级在线视频| 最近2019免费中文字幕视频三| 欧美系列一区二区| gogogo免费高清日本写真| 欧美日韩一级在线观看| h视频在线观看免费| 久热免费在线观看| 成人午夜视频一区二区播放| 男女视频一区二区| 欧洲精品中文字幕| 亚洲人成欧美中文字幕| 精品99久久久久成人网站免费| sis001欧美| 麻豆成人91精品二区三区| 成人黄色免费观看| 亚洲免费av一区二区三区| 国产精品久久久久久久久久久久| 欧美爆操老女人| 黄网站app在线观看下载视频大全官网| 成人免费观看www在线| 日本一本草久p| 91精品久久久久久蜜臀| 2019中文字幕在线| 日韩欧美中文第一页| 久久99久久98精品免观看软件| 精品久久久久久久久久国产| 中文字幕 日本| 日韩国产精品毛片| 亚洲欧洲国产日韩| aaa级精品久久久国产片| 美女视频一区二区三区在线| 久久精品国产亚洲777| 91好色先生tv| 性欧美13一14内谢| 91精品视频网站| 蜜桃视频欧美| 福利一区视频| 精品久久人妻av中文字幕| 人妻夜夜添夜夜无码av| 国产精品视频| 中文字幕a级片| 香蕉网站在线| 国产精品久久久久久久7电影| 九九九视频在线观看| 性欧美在线看片a免费观看| 亚洲人成亚洲人成在线观看| 99亚洲精品视频| 亚洲免费在线播放视频| 在线免费高清一区二区三区| 精品无人区无码乱码毛片国产| 成人做爰69片免网站| 国产一区白浆| 国产一区二区三区高清在线观看| 亚洲一区黄色| 亚洲国产成人va在线观看天堂| 超碰97人人射妻| 中文字幕欧美日韩精品| www.一区二区| 91精品国产三级| 免费看国产精品一二区视频| 亚洲国产成人精品无码区99| 无码人妻少妇色欲av一区二区| h在线观看视频免费网站| 国产精品一级二级三级| 国产区二精品视| 中文字幕精品一区二| 久久99亚洲精品| 熟女性饥渴一区二区三区| 国产精品久一| 97netav| 明星国产一级毛片范冰冰视频| 国产免费成人av| 久久er热在这里只有精品66| 亚洲欧美日韩国产中文专区| 国产在线免费看| 亚洲产国偷v产偷v自拍涩爱| 91美女片黄在线观看| 成人午夜免费福利| 精品人妻一区二区三区浪潮在线| 日韩精品一区二区三区蜜臀| 亚洲人成无码网站久久99热国产| 国产叼嘿视频在线观看| 日韩在线观看免费高清完整版| chinese叫床对白videos| 黄色片视频在线观看| 久久成人福利视频| 一区二区成人在线视频| 黄页网站在线免费观看| 日韩大陆av| 亚洲国产精品ⅴa在线观看| 色爱精品视频一区| 国产精品magnet| 欧美亚洲一区三区| 国产绿帽一区二区三区| 久久久99精品免费观看不卡| 视频在线一区二区| 日本在线一区二区| 欧美熟女一区二区| 国产呦系列欧美呦日韩呦| 久久精品色综合| 热re66久久精品国产99re| 久久久久久久久久久成人| 精品黑人一区二区三区在线观看| 亚洲区精品久久一区二区三区| 日韩免费av网站| 国内激情视频在线观看| 欧美黄色一区二区三区| 中文文字幕文字幕高清| 国产一区不卡在线观看| 亚洲精品视频观看| 日韩免费视频一区二区| 亚洲综合国产激情另类一区| 日韩欧美中文一区二区| 91欧洲在线视精品在亚洲| www.97| 免费人成年激情视频在线观看| 亚洲精品一区久久久久久| 成人午夜在线免费| 日韩精品社区| 视频在线不卡| 在线免费电影观看| 香蕉成人啪国产精品视频综合网| 麻豆福利视频| 久久综合九色综合久久久精品综合| 日韩啪啪电影网| 国产日产精品一区| 成人欧美视频在线| 性中国xxx极品hd| 免费看日韩毛片| 久久99久久99小草精品免视看| 国产 高清 精品 在线 a| 亚洲人成免费| 日日日日人人人夜夜夜2017| 日韩精品免费一区| 久热这里有精品| 爱看av在线| 无码任你躁久久久久久老妇| 日韩精品一区二区三区视频播放| 精品久久一二三区| 精品亚洲aⅴ无码一区二区三区| 国产99视频精品免视看7| 亚州av综合色区无码一区| 永久免费的av网站| 天天做夜夜做人人爱精品| 中文字幕亚洲视频| 国产精品无码网站| 欧美高清性猛交| 亚洲五月六月丁香激情| 精品国产亚洲一区二区三区大结局| 亚洲欧美一区二区三区在线播放| 国产在线www| 亚洲女人天堂视频| 91精品入口| 99久久精品无码一区二区毛片| 91最新在线观看| 中文字幕在线视频一区二区| 欧美视频中文在线看| 国产激情精品久久久第一区二区| 成人做爰视频网站| 色一情一乱一伦一区二区三区| 国产精久久久久| 黄色电影在线免费观看| 久久久国产精品成人免费| 电影亚洲精品噜噜在线观看| 亚洲精品影视| 亚洲精选一二三| 欧美综合第一页| 成人性生交大片免费看中文| 中文字幕中文乱码欧美一区二区| 欧美一级精品片在线看| 日韩av懂色| 黄色小网站在线观看| 精品国产一区二区三区久久| 欧美多人野外伦交| 蜜桃久久精品乱码一区二区| 亚洲成人网av| 日本福利一区二区三区| av在线free| 国产一区二区在线播放| 亚洲一区欧美在线| 日韩成人视屏| 欧美一区2区视频在线观看| 日韩精品极品在线观看播放免费视频| 亚洲欧美日韩一区| 精品一区精品二区高清| 亚洲永久精品ww.7491进入| 91精品国产自产在线观看永久| 一级黄色片播放| 久草在线新视觉| 中文字幕在线中文字幕在线中三区| 婷婷精品视频| 麻豆成人在线看| 免费视频91蜜桃| 欧美精品中文字幕亚洲专区| 邪态动恶图27期gif| 小早川怜子一区二区三区| aaaa欧美| 人妻精品久久久久中文字幕69| 青青操在线播放| 一本到在线视频| 国产精品一区在线免费观看| 亚洲视频一区二区免费在线观看| 欧美三区美女| wwwww黄色| 亚洲精品手机在线| 日本黄色动态图|