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

nginx內(nèi)部訪問特性如何實(shí)現(xiàn)靜態(tài)資源授權(quán)訪問

 更新時(shí)間:2024年06月19日 15:24:59   作者:左直拳  
這篇文章主要介紹了nginx內(nèi)部訪問特性如何實(shí)現(xiàn)靜態(tài)資源授權(quán)訪問方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

nginx內(nèi)部訪問特性實(shí)現(xiàn)靜態(tài)資源授權(quán)訪問

在nginx中,將靜態(tài)資源設(shè)為internal;然后將前端的靜態(tài)資源地址改為指向后端,在后端的響應(yīng)頭部中寫上靜態(tài)資源地址。

近期客戶對(duì)我們項(xiàng)目做安全性測(cè)評(píng),暴露出一些安全性問題,其中一個(gè)是有些靜態(tài)頁面(*.html)無須授權(quán)即可直接訪問,里面的信息一覽無遺,不安全。

這些靜態(tài)頁面都是arcgis地圖頁面,依賴arcgis for js,沒有辦法做成一般意義上的動(dòng)態(tài)頁面。或者說,該項(xiàng)目是個(gè)老項(xiàng)目,目前只處于維護(hù)階段,大規(guī)模改頭換面不現(xiàn)實(shí)。

怎么辦,有沒有什么方法,不改這些靜態(tài)頁面,或者是不做大的調(diào)整,就能實(shí)現(xiàn)只有登錄后才能訪問它們呢?

看到網(wǎng)上有文章介紹,可以利用nginx的internal特性,將靜態(tài)資源設(shè)為內(nèi)部訪問,即可實(shí)現(xiàn)需要鑒權(quán)才能訪問。

原理說起來也比較簡(jiǎn)單。所謂內(nèi)部訪問,是指你直接在瀏覽器輸入靜態(tài)資源地址,將無法訪問,會(huì)直接報(bào)404,只有通過后端向nginx發(fā)送特定信息才可以。而后端,我們是要登錄系統(tǒng)以后才能請(qǐng)求的,所以就能實(shí)現(xiàn)我們想要的效果了。

具體來說就是:

假設(shè)我們前端部署在nginx,原本我們要訪問某個(gè)靜態(tài)頁面:/A.html,現(xiàn)在不行了,要將地址改為 /api/static/getA,改而向后端請(qǐng)求;后端收到請(qǐng)求后,在響應(yīng)信息頭里加上一句:

response.setHeader("X-Accel-Redirect", "/A.html");

返回;nginx接收到響應(yīng)信息后,于是將/A.html最終返回。

現(xiàn)在來真的,我們要實(shí)現(xiàn)/projects/dzzhyj/index.html的鑒權(quán)訪問。

實(shí)現(xiàn)步驟

一、配置nginx

server {
    listen      8001;
    server_name 192.168.0.218;
    
        。。。
    
    location /projects/dzzhyj/ {
        alias /home/gzdd_html/gzdd/projects/dzzhyj/;#物理路徑

        location ~* \.html$ {#只設(shè)置*.html為內(nèi)部訪問
            internal;
        }
    }      
}

二、修改前端代碼

<template>
  <div class="-map-container">
<!--    <iframe src="/projects/dzzhyj/index.html" ></iframe> -->
    <iframe src="/api/dzzhyj/redirect/dzzhyj" ></iframe>
  </div>
</template>

三、增加后端代碼

@Controller
@RequestMapping("redirect")
public class RedirectController {
    @GetMapping("/dzzhyj")
    public void handleDzzhyj(HttpServletRequest request, HttpServletResponse response) throws Exception {
            response.setHeader("X-Accel-Redirect", "/projects/dzzhyj/index.html");
    }
}

四、運(yùn)行結(jié)果

直接訪問靜態(tài)頁面,不行

通過后端地址可以

但后端必須登錄才行

完美。

說下總結(jié)

這功能在nginx下才能使用。

其他web服務(wù)器有沒有類似機(jī)制不得而知。

但我們平時(shí)開發(fā),用vue,都直接用npm來跑,所以后端代碼做點(diǎn)更改,判斷是nginx發(fā)出的請(qǐng)求,才做上述處理,否則跳轉(zhuǎn):

@Controller
@RequestMapping("redirect")
public class RedirectController {
    @GetMapping("/dzzhyj")
    public void handleDzzhyj(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String xForwardedForHeader = request.getHeader("X-Real-IP");
        if (xForwardedForHeader != null && !xForwardedForHeader.isEmpty()) {
            // 請(qǐng)求經(jīng)過了 Nginx
            response.setHeader("X-Accel-Redirect", "/projects/dzzhyj/index.html");
        } else {
            // 請(qǐng)求未經(jīng)過 Nginx
            String[] hosts = request.getHeader("X-Forwarded-Host").split(",");
            String url = String.format("http://%s/projects/dzzhyj/index.html",hosts[0]);
            response.sendRedirect(url);
        }
    }
}

其實(shí)沒有方法能直接判斷請(qǐng)求是否來自nginx,我是比較了從node發(fā)出的請(qǐng)求和從nginx發(fā)出的請(qǐng)求所包含的鍵值,看其中有沒有包含“X-Real-IP”,簡(jiǎn)單地做了一下判斷,不一定對(duì)。

1)vue運(yùn)行時(shí)的請(qǐng)求request結(jié)構(gòu)

2)nginx的request

補(bǔ)充:

  • 我發(fā)現(xiàn),也許是兜兜轉(zhuǎn)轉(zhuǎn)的緣故,瀏覽器對(duì)這種訪問可能有一些處理。
  • 當(dāng)?shù)谝淮我驗(yàn)橄到y(tǒng)初始化未完成,或其他什么原因,加載失敗的話,后面就會(huì)一直失敗。
  • 這時(shí)候?qū)g覽器關(guān)掉,重新打開再訪問,或者換一種瀏覽器,就可以成功。
  • 否則一直試,一直試,永遠(yuǎn)都找不到原因。

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

相關(guān)文章

  • Nginx配置文件nginx.conf的常用配置方法

    Nginx配置文件nginx.conf的常用配置方法

    這篇文章主要介紹了Nginx配置文件nginx.conf的常用配置方法,作為剛開始著手搭建Nginx服務(wù)器的一個(gè)指南,需要的朋友可以參考下
    2015-07-07
  • Nginx流量同時(shí)轉(zhuǎn)發(fā)多后端(流量鏡像分發(fā))

    Nginx流量同時(shí)轉(zhuǎn)發(fā)多后端(流量鏡像分發(fā))

    在需要同時(shí)將請(qǐng)求轉(zhuǎn)發(fā)至多個(gè)后端服務(wù)的場(chǎng)景中,Nginx的mirror模塊提供了流量鏡像分發(fā)的功能,本文就來介紹一下Nginx流量同時(shí)轉(zhuǎn)發(fā)多后端(流量鏡像分發(fā)),感興趣的可以了解一下
    2024-10-10
  • Nginx配置圖片服務(wù)器(極簡(jiǎn)配置)

    Nginx配置圖片服務(wù)器(極簡(jiǎn)配置)

    本文主要介紹了主要是Nginx做靜態(tài)圖片服務(wù)器的詳情配置說明,還包括做反向代理、動(dòng)靜分離、負(fù)載均衡的極簡(jiǎn)配置,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Nginx?部署及配置詳細(xì)步驟(附詳細(xì)代碼)

    Nginx?部署及配置詳細(xì)步驟(附詳細(xì)代碼)

    Nginx是一個(gè)web服務(wù)器也可以用來做負(fù)載均衡及反向代理使用,目前使用最多的就是負(fù)載均衡,這篇文章主要介紹了Nginx部署及配置的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11
  • nginx部署vue前端打包項(xiàng)目方式

    nginx部署vue前端打包項(xiàng)目方式

    本文指導(dǎo)Vue項(xiàng)目部署至Nginx,包括打包成dist.zip、上傳解壓到nginx/html目錄、修改配置文件server塊及base路徑,替換后端IP后啟動(dòng)Nginx,通過指定IP:8083訪問前端頁面
    2025-07-07
  • Nginx日志定期清理設(shè)置實(shí)現(xiàn)

    Nginx日志定期清理設(shè)置實(shí)現(xiàn)

    本文主要介紹了Nginx日志定期清理設(shè)置實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-12-12
  • nginx配置代理多個(gè)前端資源

    nginx配置代理多個(gè)前端資源

    本文主要介紹了nginx配置代理多個(gè)前端資源,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Nginx 上傳大文件超時(shí)解決辦法

    Nginx 上傳大文件超時(shí)解決辦法

    這篇文章主要介紹了Nginx 上傳大文件超時(shí)解決辦法的相關(guān)資料,這里上傳文件并設(shè)置nginx的配置文件防止超時(shí)的情況,需要的朋友可以參考下
    2017-07-07
  • Nginx啟用gzip壓縮的方法示例

    Nginx啟用gzip壓縮的方法示例

    這篇文章主要介紹了Nginx啟用gzip壓縮的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • Centos7.3 安裝部署Nginx并配置https的方法步驟

    Centos7.3 安裝部署Nginx并配置https的方法步驟

    這篇文章主要介紹了Centos7.3 安裝部署Nginx并配置https的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論

镇安县| 山西省| 尼勒克县| 望江县| 申扎县| 关岭| 松溪县| 封开县| 九江县| 仙游县| 石屏县| 定边县| 凤冈县| 南涧| 府谷县| 望谟县| 神农架林区| 关岭| 铜川市| 油尖旺区| 手机| 阿合奇县| 铁岭市| 河曲县| 砚山县| 竹北市| 苍溪县| 宁化县| 巴马| 桃源县| 金平| 茂名市| 老河口市| 东至县| 平乡县| 梓潼县| 丽水市| 瓮安县| 盱眙县| 清远市| 伊通|