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

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

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

遇到問題?

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

問:這是為啥?需要如何修改?

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

Nginx配置如下

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

    server_name www.abc.com abc.com;  # 綁定的域名
    root html;
    index index.html index.htm;
    # SSL證書和私鑰的路徑
    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)頁面配置,代碼傳到/opt/docker-data/nginx/h5路徑即可
    location /tongsongzj/ {
        # 靜態(tài)網(wǎng)頁配置
        root /usr/share/nginx/h5;  # 靜態(tài)網(wǎng)頁的根目錄
        index index.html;  # 默認打開的文件
        try_files $uri $uri/ /index.html;  # 嘗試查找URI對應(yīng)的文件,否則返回index.html

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

問題解決

靜態(tài)文件無法訪問的原因在于路徑拼接方式錯誤

以下是詳細分析和解決方案:

問題分析:路徑拼接邏輯錯誤

當前配置中使用了 root 指令:

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

Nginx 會將 location 路徑拼接到 root 后面,因此實際訪問路徑為:

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

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

解決方案:改用 alias 指令

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

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)鍵修改說明

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

其他注意事項

1.確認文件路徑

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

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

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

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

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

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

3.檢查 Nginx 日志

查看錯誤日志定位具體原因:

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

完整修正配置參考

# 靜態(tài)頁面配置
location /tongsongzj/ {
    alias /usr/share/nginx/h5/;  # 使用 alias 直接映射真實路徑
    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)頁面配置,代碼傳到 /opt/docker-data/nginx/h5/tongsongzj 路徑即可
    # 說明:使用root指令,Nginx 會將 location 路徑拼接到 root 后面,因此實際訪問路徑為:/usr/share/nginx/h5/tongsongzj/index.html
    location /tongsongzj/ {
        # 靜態(tài)網(wǎng)頁配置
        root /usr/share/nginx/h5;  # 靜態(tài)網(wǎng)頁的根目錄 【最終路徑 = root + location】
        index index.html;  # 默認打開的文件
        try_files $uri $uri/ /index.html;  # 嘗試查找URI對應(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ū)別是避免配置錯誤的關(guān)鍵。

1.root指令

定義

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

示例

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

當訪問 /static/image.jpg 時,Nginx 會查找文件:

/var/www/static/image.jpg

(路徑 = root + location 的 URI)

優(yōu)點

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

缺點

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

注意事項

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

2.alias指令

定義

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

示例

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

當訪問 /docs/readme.html 時,Nginx 會查找文件:

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

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

優(yōu)點

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

缺點

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

注意事項

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

關(guān)鍵對比表格

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

常見錯誤場景與修復(fù)

錯誤 1:路徑多了一層子目錄

錯誤配置(使用 root):

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

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

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

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

錯誤配置

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

修復(fù)方法

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

最佳實踐

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

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

2.必須用 alias 的場景

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

3.嚴格處理斜杠

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

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

  • 如果是單頁應(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 進程有權(quán)限讀取目錄和文件:

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

總結(jié)

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

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

配置完成后,使用 nginx -t 測試語法,并通過日志排查錯誤:

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

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

相關(guān)文章

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

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

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

    Nginx部署JavaWeb項目全過程

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

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

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

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

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

    nginx做白名單和限流的完整過程

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

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

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

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

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

    Nginx配置SSL證書監(jiān)聽443端口

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

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

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

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

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

最新評論

无棣县| 大荔县| 滕州市| 将乐县| 昌乐县| 永寿县| 赤壁市| 苗栗县| 蒲城县| 宣化县| 孟州市| 竹北市| 洪泽县| 石城县| 治县。| 新宁县| 荥阳市| 远安县| 团风县| 武冈市| 尤溪县| 双鸭山市| 阳新县| 桂东县| 广德县| 建德市| 顺义区| 镇雄县| 东乡县| 黔东| 永德县| 安义县| 沧源| 遵义县| 蒙阴县| 天峻县| 岳西县| 渭源县| 尤溪县| 旺苍县| 山东|