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

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

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

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

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

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

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

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

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

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

具體來(lái)說(shuō)就是:

假設(shè)我們前端部署在nginx,原本我們要訪問(wèn)某個(gè)靜態(tài)頁(yè)面:/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)在來(lái)真的,我們要實(shí)現(xiàn)/projects/dzzhyj/index.html的鑒權(quán)訪問(wè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)部訪問(wèn)
            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é)果

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

通過(guò)后端地址可以

但后端必須登錄才行

完美。

說(shuō)下總結(jié)

這功能在nginx下才能使用。

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

但我們平時(shí)開發(fā),用vue,都直接用npm來(lái)跑,所以后端代碼做點(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)過(guò)了 Nginx
            response.setHeader("X-Accel-Redirect", "/projects/dzzhyj/index.html");
        } else {
            // 請(qǐng)求未經(jīng)過(guò) 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í)沒(méi)有方法能直接判斷請(qǐng)求是否來(lái)自nginx,我是比較了從node發(fā)出的請(qǐng)求和從nginx發(fā)出的請(qǐng)求所包含的鍵值,看其中有沒(méi)有包含“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ì)這種訪問(wèn)可能有一些處理。
  • 當(dāng)?shù)谝淮我驗(yàn)橄到y(tǒng)初始化未完成,或其他什么原因,加載失敗的話,后面就會(huì)一直失敗。
  • 這時(shí)候?qū)g覽器關(guān)掉,重新打開再訪問(wèn),或者換一種瀏覽器,就可以成功。
  • 否則一直試,一直試,永遠(yuǎn)都找不到原因。

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

相關(guān)文章

  • Nginx地址重定向的實(shí)現(xiàn)

    Nginx地址重定向的實(shí)現(xiàn)

    重定向 是將一個(gè)域名或地址指向另一個(gè)的方法,本文主要介紹了Nginx地址重定向的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • Nginx 根據(jù)URL帶的參數(shù)轉(zhuǎn)發(fā)的實(shí)現(xiàn)

    Nginx 根據(jù)URL帶的參數(shù)轉(zhuǎn)發(fā)的實(shí)現(xiàn)

    這篇文章主要介紹了Nginx 根據(jù)URL帶的參數(shù)轉(zhuǎn)發(fā)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Nginx的nginx.conf配置文件中文注釋說(shuō)明

    Nginx的nginx.conf配置文件中文注釋說(shuō)明

    這篇文章主要介紹了Nginx的nginx.conf配置文件中文注釋說(shuō)明,本文是個(gè)人注釋版,在生產(chǎn)環(huán)境中經(jīng)常使用,需要的朋友可以參考下
    2014-12-12
  • Nginx配置后請(qǐng)求報(bào)404的幾種問(wèn)題解決方法

    Nginx配置后請(qǐng)求報(bào)404的幾種問(wèn)題解決方法

    本文主要介紹了Nginx配置后請(qǐng)求報(bào)404的兩種常見(jiàn)問(wèn)題及其解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • nginx+php出現(xiàn)No input file specified解決辦法

    nginx+php出現(xiàn)No input file specified解決辦法

    這篇文章主要介紹了nginx+php出現(xiàn)No input file specified解決辦法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • nginx反向代理失效前端無(wú)法獲取后端的數(shù)據(jù)解決辦法

    nginx反向代理失效前端無(wú)法獲取后端的數(shù)據(jù)解決辦法

    Nginx服務(wù)器的反向代理服務(wù)是其最常用的重要功能,由反向代理服務(wù)也可以衍生出很多與此相關(guān)的Nginx服務(wù)器重要功能,下面這篇文章主要給大家介紹了關(guān)于nginx反向代理失效前端無(wú)法獲取后端的數(shù)據(jù)解決的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • Nginx服務(wù)器中414錯(cuò)誤和504錯(cuò)誤的配置解決方法

    Nginx服務(wù)器中414錯(cuò)誤和504錯(cuò)誤的配置解決方法

    這篇文章主要介紹了Nginx服務(wù)器中414錯(cuò)誤和504錯(cuò)誤的配置解決方法,分別對(duì)應(yīng)Request-URI Too Large和Gateway Time-out這樣的錯(cuò)誤提示,需要的朋友可以參考下
    2015-12-12
  • nginx如何開啟Gzip壓縮

    nginx如何開啟Gzip壓縮

    啟用Gzip壓縮能顯著減小網(wǎng)頁(yè)資源如css、js的體積,提升加載速度,配置方法簡(jiǎn)單,在nginx的http塊中添加規(guī)則后重啟即可,注意,不適用于圖片和大文件壓縮
    2024-11-11
  • nginx反向代理服務(wù)器及負(fù)載均衡服務(wù)配置方法

    nginx反向代理服務(wù)器及負(fù)載均衡服務(wù)配置方法

    正向代理一般是在客戶端設(shè)置代理服務(wù)器,通過(guò)代理服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求,最終訪問(wèn)到目標(biāo)服務(wù)器,這篇文章主要介紹了nginx反向代理服務(wù)器及負(fù)載均衡服務(wù)配置方法,需要的朋友可以參考下
    2023-12-12
  • nginx 平滑重啟與升級(jí)的實(shí)現(xiàn)方法

    nginx 平滑重啟與升級(jí)的實(shí)現(xiàn)方法

    有時(shí)候我們需要平滑重啟nginx服務(wù),防止出現(xiàn)問(wèn)題,這里簡(jiǎn)單的總結(jié),方便需要的朋友
    2013-02-02

最新評(píng)論