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

深入了解Nginx auth_request

 更新時(shí)間:2024年12月26日 11:06:07   作者:zzhongcy  
描述:nginx-auth-request-module模塊用于實(shí)現(xiàn)權(quán)限控制攔截,通過配置可以實(shí)現(xiàn)多個(gè)站點(diǎn)之間的統(tǒng)一權(quán)限控制,下面就來介紹一下,感興趣的可以了解一下

模塊

nginx-auth-request-module

該模塊是nginx一個(gè)安裝模塊,使用配置都比較簡單,只要作用是實(shí)現(xiàn)權(quán)限控制攔截作用。默認(rèn)高版本nginx(比如1.12)已經(jīng)默認(rèn)安裝該模塊,下面介紹下使用該模塊實(shí)現(xiàn)多個(gè)站點(diǎn)之間的統(tǒng)一權(quán)限控制。

例子1

這里用一個(gè)例子來說明下,如下例子是包含site1(對應(yīng)web1)、site2(對應(yīng)web2)、auth(20.131:7001)在內(nèi)的三個(gè)應(yīng)用項(xiàng)目,auth項(xiàng)目主要做權(quán)限攔截,比如jwt校驗(yàn)等,site1、site2分別為兩個(gè)受保護(hù)的資源站點(diǎn),只有auth授權(quán)通過后才能訪問該站點(diǎn)。

實(shí)現(xiàn)上述要求nginx配置詳情如下(nginx地址為20.198):

upstream web1 {
    server 192.168.20.131:3000;
}

upstream web2 {
    server 192.168.20.131:3001;
}
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location /api/web1 {

        auth_request /auth;
        error_page 401 = @error401;

        auth_request_set $user $upstream_http_x_forwarded_user;
        proxy_set_header X-Forwarded-User $user;
        proxy_pass http://web1;
    }

    location /api/web2 {
        auth_request /auth;
        error_page 401 = @error401;

        auth_request_set $user $upstream_http_x_forwarded_user;
        proxy_set_header X-Forwarded-User $user;
        proxy_pass http://web2;
    }

    location /auth {
        internal;
        proxy_set_header Host $host;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_pass http://192.168.20.131:7001/auth;
    }

    
    location @error401 {
        add_header Set-Cookie "NSREDIRECT=$scheme://$http_host$request_uri;Path=/";
        return 302 http://192.168.20.131:7001/login;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

配置好之后,要明白一點(diǎn),那就是nginx-auth-request-module模塊基本使用原理就是:

1、auth_request對應(yīng)的路由返回401 or 403時(shí),會攔截請求直接nginx返回前臺401 or 403信息;

2、auth_request對應(yīng)的路由返回2xx狀態(tài)碼時(shí),不會攔截請求,而是構(gòu)建一個(gè)subrequest請求再去請求真實(shí)受保護(hù)資源的接口;

所以,基于此,auth模塊只需要校驗(yàn)然后返回相應(yīng)的狀態(tài)碼即可實(shí)現(xiàn)權(quán)限攔截操作,簡單測試如下:

auth代碼:

// 授權(quán)認(rèn)證接口
  async auth() {
    console.log(Date.now());
    this.ctx.status = 200;
  }

  // 失敗后的登錄頁面
  async login() {
    console.log('失敗了........');
    this.ctx.body = {
      msg: '授權(quán)失敗',
      code: 10001
    }
  }

這里的auth授權(quán)接口我們直接返回200,login是上述auth項(xiàng)目下配置的路由,用于授權(quán)失敗后302至登錄頁面用的。

site1和site2代碼相同,只羅列一個(gè)如下:

/* /api/web1/users,如果是web2則為/api/web2/users */
router.all('/', function(req, res, next) {
  res.send('respond with a resource from web1');
});

這里只是簡單渲染輸出一個(gè)字符串而已,測試如下:

瀏覽器訪問:http://192.168.20.198/api/web1/users,輸出:

改變auth接口如下:

// 授權(quán)認(rèn)證接口
  async auth() {
    console.log(Date.now());
    this.ctx.status = 401;
  }

  // 失敗后的登錄頁面
  async login() {
    console.log('失敗了........');
    this.ctx.body = {
      msg: '授權(quán)失敗',
      code: 10001
    }
  }

這里將狀態(tài)碼改為了401,再次訪問:http://192.168.20.198/api/web1/users,輸出:

這里可以看到,瀏覽器直接進(jìn)行了302跳轉(zhuǎn),因?yàn)殍b權(quán)失敗,直接重定向到登錄頁面了。

以上就是關(guān)于nginx-auth-request-module模塊的基本操作及配置,多個(gè)項(xiàng)目下部署統(tǒng)一的權(quán)限接口時(shí)還是相當(dāng)有用的。

例子2

首先,確保Nginx已經(jīng)安裝并啟用了auth_request模塊。然后,編輯Nginx配置文件(通常是nginx.conf或某個(gè)虛擬主機(jī)配置文件)。

通過–with-http_auth_request_module添加auth_request模塊

http {
  # 定義認(rèn)證服務(wù)的邏輯
  server {
    listen 127.0.0.1:8080;
    location /auth {
      # 此處為簡單示例,實(shí)際應(yīng)用中應(yīng)調(diào)用外部認(rèn)證服務(wù)
      if ($http_authorization = "Basic dXNlcm5hbWU6cGFzc3dvcmQ=") {  # 假設(shè)認(rèn)證使用Basic Auth
        return 200;
      }
      return 401;
    }
  }

  server {
    listen 80;
    server_name example.com;

    location / {
      # 使用 auth_request 調(diào)用認(rèn)證服務(wù)
      auth_request /auth;

      # 處理認(rèn)證服務(wù)的響應(yīng)結(jié)果
      error_page 401 = @error401;
      error_page 403 = @error403;

      # 正常處理請求
      proxy_pass http://backend;
    }

    # 定義認(rèn)證失敗時(shí)的處理邏輯
    location @error401 {
      return 401 "Unauthorized";
    }

    location @error403 {
      return 403 "Forbidden";
    }

    # 認(rèn)證服務(wù)的代理設(shè)置
    location /auth {
      proxy_pass http://127.0.0.1:8080/auth;
      proxy_pass_request_body off; # 不代理請求體到認(rèn)證服務(wù)
      proxy_set_header Content-Length "";
      proxy_set_header X-Original-URI $request_uri;
    }
  }
}

配置說明

定義認(rèn)證服務(wù):

server {
  listen 127.0.0.1:8080;
  location /auth {
    if ($http_authorization = "Basic dXNlcm5hbWU6cGFzc3dvcmQ=") {
      return 200;
    }
    return 401;
  }
}

這個(gè)server塊模擬了一個(gè)簡單的認(rèn)證服務(wù),它監(jiān)聽127.0.0.1:8080,根據(jù)請求頭Authorization判斷用戶是否經(jīng)過認(rèn)證。在實(shí)際應(yīng)用中,這個(gè)應(yīng)該是一個(gè)調(diào)用外部服務(wù)的代理配置。

主站點(diǎn)配置:

server {
  listen 80;
  server_name example.com;

  location / {
    auth_request /auth;
    error_page 401 = @error401;
    error_page 403 = @error403;
    proxy_pass http://backend;
  }

  location @error401 {
    return 401 "Unauthorized";
  }

  location @error403 {
    return 403 "Forbidden";
  }

  location /auth {
    proxy_pass http://127.0.0.1:8080/auth;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $request_uri;
  }
}
  • auth_request /auth;:該指令告訴Nginx,在處理用戶請求前,先將請求發(fā)送到/auth進(jìn)行認(rèn)證。
  • error_page 401 = @error401;和error_page 403 = @error403;:定義認(rèn)證失敗時(shí)的處理邏輯,將401或403錯(cuò)誤重定向到相應(yīng)的處理塊。
  • proxy_pass http://backend;:成功認(rèn)證后,將請求代理到后端服務(wù)器。

認(rèn)證失敗處理:

location @error401 {
  return 401 "Unauthorized";
}

location @error403 {
  return 403 "Forbidden";
}

認(rèn)證失敗時(shí),根據(jù)實(shí)際情況返回401或403狀態(tài)碼,并附帶相應(yīng)的錯(cuò)誤信息。

測試與驗(yàn)證

啟動(dòng)Nginx,嘗試訪問http://example.com,并使用不同的Authorization頭部測試認(rèn)證行為。如果頭部包含正確的用戶名和密碼(在本例中為"Basic dXNlcm5hbWU6cGFzc3dvcmQ="),請求應(yīng)被允許訪問后端資源,否則返回相應(yīng)的錯(cuò)誤狀態(tài)碼。

例子3

upstream web1 {
    server 192.168.20.131:3000;
}

upstream web2 {
    server 192.168.20.131:3001;
}

location ^~ /session/ {

        charset  utf-8;
        auth_request /session-backend-info/;
        auth_request_set $backend $upstream_http_backend;

        proxy_set_header Forwarded $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Port  $remote_port;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_pass $backend/$request_uri;

    }

$backend為web1、web2 upstream

到此這篇關(guān)于深入了解Nginx auth_request的文章就介紹到這了,更多相關(guān)Nginx auth_request內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • nginx有哪些常規(guī)調(diào)優(yōu)手段詳解

    nginx有哪些常規(guī)調(diào)優(yōu)手段詳解

    性能調(diào)優(yōu)就是用更少的資源提供更好的服務(wù),成本利益最大化,下面這篇文章主要給大家介紹了關(guān)于nginx有哪些常規(guī)調(diào)優(yōu)手段的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Nginx為Tomcat服務(wù)器作反向代理的配置教程

    Nginx為Tomcat服務(wù)器作反向代理的配置教程

    這篇文章主要介紹了Nginx為Tomcat服務(wù)器作反向代理的配置教程,文中以Windows系統(tǒng)為環(huán)境來演示驅(qū)動(dòng)JSP程序的示例,需要的朋友可以參考下
    2016-03-03
  • Nginx列出目錄和文件并用密碼控制訪問權(quán)限配置方法

    Nginx列出目錄和文件并用密碼控制訪問權(quán)限配置方法

    這篇文章主要介紹了Nginx列出目錄和文件并用密碼控制訪問權(quán)限配置方法,本文給出了詳細(xì)的安裝配置步驟,需要的朋友可以參考下
    2015-07-07
  • 詳解nginx進(jìn)程鎖的實(shí)現(xiàn)

    詳解nginx進(jìn)程鎖的實(shí)現(xiàn)

    nginx是多進(jìn)程并發(fā)模型的應(yīng)用,但為了網(wǎng)絡(luò)請求的安全性,必須要使用到鎖,那么這個(gè)進(jìn)程鎖如何實(shí)現(xiàn)呢
    2021-06-06
  • Nginx配置缺少導(dǎo)致CSS不起作用的問題及解決方法

    Nginx配置缺少導(dǎo)致CSS不起作用的問題及解決方法

    在Web開發(fā)中,確保樣式表正確加載是前端顯示正常工作的關(guān)鍵,然而,有時(shí)候即使CSS文件的路徑和代碼本身沒有問題,CSS樣式也可能無法正確應(yīng)用,本文將分享一個(gè)常見的問題——Nginx配置缺少導(dǎo)致的CSS不起作用,以及如何解決這個(gè)問題,感興趣的朋友一起看看吧
    2024-07-07
  • keepalived+nginx實(shí)現(xiàn)網(wǎng)站高可用性

    keepalived+nginx實(shí)現(xiàn)網(wǎng)站高可用性

    本文主要介紹了keepalived+nginx實(shí)現(xiàn)網(wǎng)站高可用性,包含配置Keepalived實(shí)現(xiàn)雙主熱備集群架構(gòu),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • 如何讓Nginx快速支持TLS1.3協(xié)議詳解

    如何讓Nginx快速支持TLS1.3協(xié)議詳解

    這篇文章主要給大家介紹了如何讓Nginx快速支持TLS1.3協(xié)議的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • Nginx防止直接用IP訪問Web服務(wù)器的設(shè)置方法

    Nginx防止直接用IP訪問Web服務(wù)器的設(shè)置方法

    看了很多Nginx的配置,好像都忽略了ip直接訪問Web的問題,這樣理論上不利于SEO優(yōu)化,所以我們希望可以避免直接用IP訪問網(wǎng)站,而是域名訪問,具體怎么做呢,看下面
    2012-09-09
  • centos7系統(tǒng)下nginx安裝并配置開機(jī)自啟動(dòng)操作

    centos7系統(tǒng)下nginx安裝并配置開機(jī)自啟動(dòng)操作

    這篇文章主要介紹了centos7系統(tǒng)下nginx安裝并配置開機(jī)自啟動(dòng)操作方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02
  • keepalived對nginx進(jìn)行高可用搭建及原理詳解

    keepalived對nginx進(jìn)行高可用搭建及原理詳解

    這篇文章主要為大家介紹了keepalived對nginx進(jìn)行高可用搭建及原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09

最新評論

汝阳县| 秦皇岛市| 垣曲县| 邯郸市| 康定县| 高尔夫| 吉隆县| 阿克陶县| 平顶山市| 清苑县| 延津县| 晴隆县| 绥阳县| 邹城市| 北流市| 镇沅| 泾阳县| 定襄县| 清水河县| 东乡| 临桂县| 禄丰县| 平和县| 宝清县| 东平县| 中超| 洪雅县| 宁明县| 吴江市| 汽车| 台州市| 大庆市| 临泉县| 涟水县| 南乐县| 额敏县| 合江县| 崇义县| 若羌县| 新野县| 湛江市|