最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx location靜態(tài)文件映射配置過(guò)程

 更新時(shí)間:2025年12月02日 08:58:27   作者:宋發(fā)元  
文章介紹了Nginx配置中root和alias指令的使用場(chǎng)景和區(qū)別,并通過(guò)實(shí)際問(wèn)題分析,指出路徑拼接邏輯錯(cuò)誤導(dǎo)致靜態(tài)文件無(wú)法訪問(wèn),最終解決方案是將root改為alias,并確保路徑正確

遇到問(wèn)題?

以下這個(gè)Nginx的配置,愿意為訪問(wèn)https://abc.com會(huì)指向一個(gè)動(dòng)態(tài)網(wǎng)站,訪問(wèn)https://abc.com/tongsongzj時(shí)會(huì)訪問(wèn)靜態(tài)網(wǎng)站,但是配置之后(注意看后面那個(gè)location /tongsongzj/靜態(tài)文件映射的配置),此時(shí)不能通過(guò)https://abc.com/tongsongzj/index.html正確訪問(wèn),顯示報(bào)錯(cuò)信息如下:

問(wèn):這是為啥?需要如何修改?

已經(jīng)確認(rèn)前端代碼在宿主機(jī)路徑/opt/docker-data/nginx/h5下,且對(duì)應(yīng)的docker中nginx容器真實(shí)路徑為/usr/share/nginx/h5。

Nginx配置如下

# ABC官網(wǎng)Nginx配置
# 這里跳轉(zhuǎn)到動(dòng)態(tài)網(wǎng)站
server {
    listen 80;  # 監(jiān)聽(tīng)80端口,用于HTTP請(qǐng)求
#     listen 443 ssl;  # 監(jiān)聽(tīng)443端口,用于HTTPS請(qǐng)求,并啟用SSL
    listen 443 ssl http2;  # 啟用 HTTP/2 的 HTTPS 監(jiān)聽(tīng)

    server_name www.abc.com abc.com;  # 綁定的域名
    root html;
    index index.html index.htm;
    # SSL證書(shū)和私鑰的路徑
    ssl_certificate conf.d/cert/abc.pem;
    ssl_certificate_key conf.d/cert/abc.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #表示使用的加密套件的類型。
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS協(xié)議的類型。
    ssl_prefer_server_ciphers on;
    location / {
        #root html;  #Web網(wǎng)站程序存放目錄。
        #index index.html index.htm;
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://abc-cms:9999;
#         proxy_pass http://172.19.19.80:8082;
    }

    # 靜態(tài)頁(yè)面配置,代碼傳到/opt/docker-data/nginx/h5路徑即可
    location /tongsongzj/ {
        # 靜態(tài)網(wǎng)頁(yè)配置
        root /usr/share/nginx/h5;  # 靜態(tài)網(wǎng)頁(yè)的根目錄
        index index.html;  # 默認(rèn)打開(kāi)的文件
        try_files $uri $uri/ /index.html;  # 嘗試查找URI對(duì)應(yīng)的文件,否則返回index.html

        # 禁用緩存
        expires off;
        add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0";
    }
}

問(wèn)題解決

靜態(tài)文件無(wú)法訪問(wèn)的原因在于路徑拼接方式錯(cuò)誤。

以下是詳細(xì)分析和解決方案:

問(wèn)題分析:路徑拼接邏輯錯(cuò)誤

當(dāng)前配置中使用了 root 指令:

location /tongsongzj/ {
    root /usr/share/nginx/h5;  # 最終路徑 = root + location
    ...
}

Nginx 會(huì)將 location 路徑拼接到 root 后面,因此實(shí)際訪問(wèn)路徑為:

/usr/share/nginx/h5/tongsongzj/index.html

但根據(jù)你的描述,靜態(tài)文件直接存放在容器的 /usr/share/nginx/h5 路徑下(對(duì)應(yīng)宿主機(jī) /opt/docker-data/nginx/h5),并未創(chuàng)建 tongsongzj 子目錄,導(dǎo)致路徑不匹配。

解決方案:改用 alias 指令

root 改為 alias 指令,并直接指向靜態(tài)文件的實(shí)際路徑:

location /tongsongzj/ {
    alias /usr/share/nginx/h5/;  # 直接映射路徑,不拼接 location
    index index.html;
    try_files $uri $uri/ /tongsongzj/index.html;  # 修正回退路徑

    # 禁用緩存配置
    expires off;
    add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0";
}

關(guān)鍵修改說(shuō)明

  1. alias 會(huì)直接將 /tongsongzj/ 映射到容器內(nèi)的 /usr/share/nginx/h5/ 目錄,不再拼接 location 路徑。
  2. 修正 try_files 確?;赝说?/tongsongzj/index.html,避免路徑錯(cuò)誤。

其他注意事項(xiàng)

1.確認(rèn)文件路徑

確保容器內(nèi) /usr/share/nginx/h5 路徑下直接存在 index.html 等靜態(tài)文件,而不是嵌套在子目錄中。

2.檢查目錄權(quán)限

運(yùn)行以下命令確保 Nginx 有權(quán)限訪問(wèn)該目錄:

docker exec [nginx容器名] ls -l /usr/share/nginx/h5

如果權(quán)限不足,嘗試在宿主機(jī)執(zhí)行:

chmod -R 755 /opt/docker-data/nginx/h5

3.檢查 Nginx 日志

查看錯(cuò)誤日志定位具體原因:

docker logs [nginx容器名] 2>&1 | grep -i error

完整修正配置參考

# 靜態(tài)頁(yè)面配置
location /tongsongzj/ {
    alias /usr/share/nginx/h5/;  # 使用 alias 直接映射真實(shí)路徑
    index index.html;
    try_files $uri $uri/ /tongsongzj/index.html;  # 保持前端路由正常

    # 禁用緩存
    expires off;
    add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0";
}

或者

    # 靜態(tài)頁(yè)面配置,代碼傳到 /opt/docker-data/nginx/h5/tongsongzj 路徑即可
    # 說(shuō)明:使用root指令,Nginx 會(huì)將 location 路徑拼接到 root 后面,因此實(shí)際訪問(wèn)路徑為:/usr/share/nginx/h5/tongsongzj/index.html
    location /tongsongzj/ {
        # 靜態(tài)網(wǎng)頁(yè)配置
        root /usr/share/nginx/h5;  # 靜態(tài)網(wǎng)頁(yè)的根目錄 【最終路徑 = root + location】
        index index.html;  # 默認(rèn)打開(kāi)的文件
        try_files $uri $uri/ /index.html;  # 嘗試查找URI對(duì)應(yīng)的文件,否則返回index.html

        # 禁用緩存
        expires off;
        add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0";
    }

修改后重啟 Nginx 服務(wù)即可生效:

docker exec [nginx容器名] nginx -s reload

root和alias的核心區(qū)別

Nginx 的 rootalias 指令都用于定義靜態(tài)文件的路徑映射,但它們的路徑拼接邏輯完全不同。理解它們的區(qū)別是避免配置錯(cuò)誤的關(guān)鍵。

1.root指令

定義

  • 路徑拼接邏輯root 會(huì)將 location 的 URI 路徑拼接到 root 指定的路徑后面。
  • 適用場(chǎng)景:當(dāng) URI 路徑和文件系統(tǒng)的目錄結(jié)構(gòu)完全一致時(shí)(例如 /static/ 對(duì)應(yīng) /var/www/static/)。

示例

location /static/ {
    root /var/www;
}

當(dāng)訪問(wèn) /static/image.jpg 時(shí),Nginx 會(huì)查找文件:

/var/www/static/image.jpg

(路徑 = root + location 的 URI)

優(yōu)點(diǎn)

  • 簡(jiǎn)單直觀:URI 路徑和文件路徑一一對(duì)應(yīng),適合標(biāo)準(zhǔn)目錄結(jié)構(gòu)。
  • 自動(dòng)處理子路徑:支持嵌套路徑(如 /static/css/style.css)。

缺點(diǎn)

  • 路徑強(qiáng)制拼接:無(wú)法靈活映射到與 URI 不匹配的目錄結(jié)構(gòu)。
  • 冗余路徑:如果 URI 路徑和實(shí)際目錄結(jié)構(gòu)不匹配,會(huì)導(dǎo)致路徑錯(cuò)誤。

注意事項(xiàng)

  • 確保 root 路徑的末尾沒(méi)有斜杠(例如 /var/www,而不是 /var/www/)。
  • 如果 location 路徑是 /static/,實(shí)際文件必須存放在 root 路徑下的 static 子目錄中。

2.alias指令

定義

  • 路徑拼接邏輯alias 會(huì)用指定的路徑完全替換 location 的 URI 路徑。
  • 適用場(chǎng)景:當(dāng) URI 路徑和實(shí)際文件路徑不一致時(shí)(例如將 /docs/ 映射到 /usr/share/nginx/html)。

示例

location /docs/ {
    alias /usr/share/nginx/html/;
}

當(dāng)訪問(wèn) /docs/readme.html 時(shí),Nginx 會(huì)查找文件:

/usr/share/nginx/html/readme.html

(路徑 = alias 路徑 + URI 去除 location 前綴后的部分)

優(yōu)點(diǎn)

  • 靈活映射:可以自由將 URI 映射到任意目錄結(jié)構(gòu)。
  • 無(wú)冗余路徑:URI 路徑和文件路徑完全解耦。

缺點(diǎn)

  • 路徑易錯(cuò):必須嚴(yán)格處理斜杠(/),否則會(huì)導(dǎo)致路徑拼接錯(cuò)誤。
  • 不支持自動(dòng)子路徑:需要手動(dòng)處理嵌套路徑。

注意事項(xiàng)

  • alias 路徑的末尾必須帶斜杠(例如 /usr/share/nginx/html/)。
  • location 的路徑末尾必須帶斜杠(例如 /docs/ 而不是 /docs),否則路徑替換可能不完整。

關(guān)鍵對(duì)比表格

特性rootalias
路徑拼接邏輯root + location URI用 alias 完全替換 location URI
斜杠處理root 路徑末尾不帶斜杠alias 路徑末尾必須帶斜杠
適用場(chǎng)景URI 與文件路徑一致URI 與文件路徑不一致
嵌套路徑支持自動(dòng)支持(如 /static/css/)需手動(dòng)處理(依賴 try_files)
常見(jiàn)錯(cuò)誤文件路徑多了一層子目錄路徑拼接錯(cuò)誤(斜杠問(wèn)題)

常見(jiàn)錯(cuò)誤場(chǎng)景與修復(fù)

錯(cuò)誤 1:路徑多了一層子目錄

錯(cuò)誤配置(使用 root):

location /tongsongzj/ {
    root /usr/share/nginx/h5;
    index index.html;
}
  • 預(yù)期路徑:/usr/share/nginx/h5/index.html
  • 實(shí)際路徑:/usr/share/nginx/h5/tongsongzj/index.html(多了一層 tongsongzj

修復(fù)方法:改用 alias

location /tongsongzj/ {
    alias /usr/share/nginx/h5/;  # 注意末尾斜杠
    index index.html;
}

錯(cuò)誤 2:斜杠缺失導(dǎo)致路徑拼接錯(cuò)誤

錯(cuò)誤配置

location /docs {
    alias /usr/share/nginx/html;  # 缺少末尾斜杠
}
  • 訪問(wèn) /docs/readme.html 時(shí),路徑變?yōu)?/usr/share/nginx/htmlreadme.html(斜杠缺失導(dǎo)致拼接錯(cuò)誤)。

修復(fù)方法

location /docs/ {                # location 末尾加斜杠
    alias /usr/share/nginx/html/;  # alias 末尾加斜杠
}

最佳實(shí)踐

1.優(yōu)先使用 root

  • 如果 URI 路徑和文件目錄結(jié)構(gòu)完全一致(例如 /static/ 對(duì)應(yīng) /var/www/static/),使用 root 更簡(jiǎn)單。

2.必須用 alias 的場(chǎng)景

  • 當(dāng)需要將 URI 映射到一個(gè)與 URI 路徑不匹配的目錄時(shí)(例如將 /legacy/ 映射到 /old-site/)。

3.嚴(yán)格處理斜杠

  • locationalias 的路徑末尾必須同時(shí)帶斜杠或不帶斜杠,且邏輯一致。
  • 推薦統(tǒng)一在 locationalias 路徑末尾加斜杠。

4.結(jié)合 try_files 處理前端路由

  • 如果是單頁(yè)應(yīng)用(如 Vue/React),需配置 try_files 回退到入口文件:
location /tongsongzj/ {
    alias /usr/share/nginx/h5/;
    try_files $uri $uri/ /tongsongzj/index.html;  # 回退到 index.html
}

5.檢查文件權(quán)限

確保 Nginx 進(jìn)程有權(quán)限讀取目錄和文件:

chmod -R 755 /opt/docker-data/nginx/h5  # 宿主機(jī)路徑

總結(jié)

  • root:路徑拼接簡(jiǎn)單,適合標(biāo)準(zhǔn)目錄結(jié)構(gòu)。
  • alias:路徑替換靈活,適合自定義映射。

核心區(qū)別在于路徑拼接邏輯,務(wù)必通過(guò)實(shí)際文件路徑驗(yàn)證配置。

配置完成后,使用 nginx -t 測(cè)試語(yǔ)法,并通過(guò)日志排查錯(cuò)誤:

tail -f /var/log/nginx/error.log

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • nginx配置靜態(tài)文件服務(wù)器詳解

    nginx配置靜態(tài)文件服務(wù)器詳解

    本篇文章主要介紹了nginx配置靜態(tài)文件服務(wù)器詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Nginx部署JavaWeb項(xiàng)目全過(guò)程

    Nginx部署JavaWeb項(xiàng)目全過(guò)程

    這篇文章主要介紹了Nginx部署JavaWeb項(xiàng)目全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 詳解Nginx輪詢算法底層實(shí)現(xiàn)的方法

    詳解Nginx輪詢算法底層實(shí)現(xiàn)的方法

    這篇文章主要介紹了詳解Nginx輪詢算法底層實(shí)現(xiàn)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 小白也可以完成的0基礎(chǔ)部署Nginx服務(wù)

    小白也可以完成的0基礎(chǔ)部署Nginx服務(wù)

    這篇文章主要為大家介紹了0基礎(chǔ)部署Nginx服務(wù)的實(shí)現(xiàn)方式,非常簡(jiǎn)單詳細(xì)零基礎(chǔ)小白跟著做也可以完成,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-03-03
  • nginx做白名單和限流的完整過(guò)程

    nginx做白名單和限流的完整過(guò)程

    ??我們都知道nginx里面是可以用lua腳本做一些稍微復(fù)雜些的邏輯處理的,要使用lua腳本需要編譯lua解釋器,時(shí)間有限我直接用了openresty,它集成了lua和nginx,這篇文章主要介紹了nginx做白名單和限流,需要的朋友可以參考下
    2024-02-02
  • 通過(guò)瀏覽器查看nginx服務(wù)器狀態(tài)配置方法

    通過(guò)瀏覽器查看nginx服務(wù)器狀態(tài)配置方法

    這篇文章主要介紹了通過(guò)瀏覽器查看nginx服務(wù)器狀態(tài)配置方法,本文講解開(kāi)啟nginx-status的配置方法,并對(duì)服務(wù)器的參數(shù)做了詳細(xì)講解,需要的朋友可以參考下
    2015-04-04
  • 一篇文章快速掌握Nginx部署前端項(xiàng)目(Nginx安裝配置及部署都非常詳細(xì)!)

    一篇文章快速掌握Nginx部署前端項(xiàng)目(Nginx安裝配置及部署都非常詳細(xì)!)

    這篇文章主要給大家介紹了關(guān)于如何通過(guò)一篇文章快速掌握Nginx部署前端項(xiàng)目的相關(guān)資料,文中從Nginx安裝配置及部署都非常詳細(xì)哦,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-01-01
  • Nginx配置SSL證書(shū)監(jiān)聽(tīng)443端口

    Nginx配置SSL證書(shū)監(jiān)聽(tīng)443端口

    這篇文章主要為大家詳細(xì)介紹了Nginx配置SSL證書(shū)監(jiān)聽(tīng)443端口的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 一些優(yōu)化Nginx服務(wù)器的技巧簡(jiǎn)介

    一些優(yōu)化Nginx服務(wù)器的技巧簡(jiǎn)介

    這篇文章主要介紹了一些優(yōu)化Nginx服務(wù)器的技巧簡(jiǎn)介,包括對(duì)HTTP模塊和Events模塊的配置建議,需要的朋友可以參考下
    2015-06-06
  • 通過(guò)nginx實(shí)現(xiàn)訪問(wèn)服務(wù)器指定目錄下圖片資源

    通過(guò)nginx實(shí)現(xiàn)訪問(wèn)服務(wù)器指定目錄下圖片資源

    這篇文章為大家詳細(xì)主要介紹了如何通過(guò)nginx實(shí)現(xiàn)訪問(wèn)服務(wù)器指定目錄下圖片資源,文中通過(guò)圖文進(jìn)行了詳細(xì)的講解,有需要的小伙伴可以了解下
    2023-10-10

最新評(píng)論

江陵县| 读书| 通道| 金秀| 西城区| 文成县| 沙坪坝区| 洛宁县| 淮安市| 即墨市| 胶州市| 洞头县| 关岭| 皮山县| 龙口市| 屏南县| 普格县| 建始县| 阿拉善左旗| 鹤山市| 苍南县| 米林县| 南木林县| 望都县| 汉源县| 论坛| 武穴市| 门头沟区| 湛江市| 合作市| 张家口市| 常州市| 剑阁县| 贵德县| 静海县| 嘉定区| 宜丰县| 邵阳市| 河北区| 梅河口市| 巨野县|