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

Nginx鑒權(quán)、限流問題

 更新時間:2024年06月19日 10:49:48   作者:yancqitcode  
這篇文章主要介紹了Nginx鑒權(quán)、限流問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、Nginx鑒權(quán)

1. 依賴模塊 依賴模塊

  • 依賴模塊
http_auth_request_module
  • 驗(yàn)證是否安裝
nginx -V 2>&1 | grep -- 'http_auth_request_module'

2. Nginx配置

server
{
	listen 80;

	location = /checkToken {
		internal;
		proxy_pass_request_body off;
		proxy_set_header Content-Length "";
		proxy_set_header via $request_uri;
		proxy_pass $auth_request_url;
	}

	location = /auth401 {
		add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate";
		if ( $arg_via = "001" ) {
			return 401 "{\"msg\":\"登錄憑證為空\",\"opCode\":\"001\",\"operateSuccess\":false}";
        }
		if ( $arg_via = "002" ) {
			return 401 "{\"msg\":\"登錄憑證失效\",\"opCode\":\"002\",\"operateSuccess\":false}";
        }
        if ( $arg_via = "003" ) {
			return 401 "{\"msg\":\"賬戶無權(quán)限\",\"opCode\":\"003\",\"operateSuccess\":false}";
        }
	}

	location /test/api/ {
		set $auth_request_url "http://127.0.0.1:8080/test/api/token/check?token=$arg_token";
		auth_request /checkToken;
		auth_request_set $auth_via $upstream_http_via;
		error_page 401 = /auth401?via=$auth_via;
		
		proxy_pass http://127.0.0.1:8080/test/api/;
	}

}

3. Rest接口

  • 驗(yàn)證的Redis賬戶權(quán)限內(nèi)容
  • TokenRest.java
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.util.Set;

@RestController
@RequestMapping("/api/token")
public class TokenRest {

	@Resource
	private RedisTemplate redisTemplate;

	@GetMapping(value="check")
	public void checkRest(HttpServletRequest request, HttpServletResponse response) {
		response.setStatus(401);
		try {
			String url = request.getHeader("via");
			if (StringUtils.isNotEmpty(url) && url.contains("?")) {
				url = url.substring(0, url.indexOf("?"));
			}
			// 白名單跳過驗(yàn)證
			String flag = (String) redisTemplate.opsForHash().get("whiteCache", url);
			if (StringUtils.isNotEmpty(flag)) {
				response.setStatus(200);
				return;
			}
			// 從Head或url中獲取token
			String token = request.getParameter("token");
			if (StringUtils.isEmpty(token) || "null".equals(token)) {
				token = request.getHeader("Authorization");
				if (token!=null && token.startsWith("Bearer ")) {
					token = token.substring(7);
				}
			}
			if (StringUtils.isEmpty(token) || "null".equals(token)) {
				response.setHeader("via", "001");
				return;
			}
			// 從Redis中獲取賬戶信息
			String accountId = (String) redisTemplate.opsForValue().get(token);
			if (accountId == null) {
				response.setHeader("via", "002");
				return;
			}
			Map<String, String> info = (Map<String, String>) redisTemplate.opsForValue().get(accountId);
			if (info == null) {
				response.setHeader("via", "003");
				return;
			}
			String[] roleIds = info.get("roles").split(",");
			for (String roleId : roleIds) {
				Set<String> securityUrls = (Set<String>) redisTemplate.opsForHash().get("funcCache",roleId);
				if (securityUrls.contains(url)) {
					flag = "1";
					break;
				}
			}
			if ("1".equals(flag)) {
				response.setStatus(200);
			} else {
				response.setHeader("via", "003");
			}
		} catch (Exception e) {
			System.err.println(e.getMessage());
		}
	}
}
  • 驗(yàn)證的Redis賬戶權(quán)限內(nèi)容

在這里插入圖片描述

二、Nginx限流

1. 簡介

Nginx限流是一種用于保護(hù)系統(tǒng)資源、防止惡意攻擊和控制流量的技術(shù)。

  • 控制速率:使用 ngx_http_limit_req_module 模塊,可以限制每個IP地址單位時間內(nèi)的請求數(shù)。
  • 控制連接數(shù):使用 ngx_http_limit_conn_module 模塊,可以限制每個IP地址同時保持的連接數(shù)。

2. 控制速率

  • nginx.conf
http
{
	limit_req_zone $binary_remote_addr zone=limit_req:10m rate=2r/s;
}
項(xiàng)說明
binary_remote_addr表示通過客戶端IP來限制
zone共享內(nèi)存區(qū)存儲訪問信息
limit_req:10m名字為limit_req的內(nèi)存區(qū)域,存儲16萬IP地址
rate=2r/s表示每秒最多處理2個請求
server
{
	location = /test.htm {
		limit_req zone=limit_req burst=10 nodelay;
		alias C:/nginx/html/test.htm;
	}
}
項(xiàng)說明
burst=10突發(fā)請求不超過10個
nodelay不延遲處理超過限制的請求

3. 控制連接數(shù)

  • nginx.conf
http
{
	limit_conn_zone $binary_remote_addr zone=limit_conn:10m;
}
項(xiàng)說明
binary_remote_addr表示通過客戶端IP來限制
zone共享內(nèi)存區(qū)存儲訪問信息
limit_conn:10m名字為limit_conn的內(nèi)存區(qū)域,存儲16萬IP地址
server
{
	location = /test.htm {
		limit_conn limit_conn 2;
		alias C:/nginx/html/test.htm;
	}
}
項(xiàng)說明
limit_conn 2同一個IP地址只允許保持2個連接

總結(jié)

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

相關(guān)文章

  • kubernetes啟用PHP+Nginx網(wǎng)頁環(huán)境教程

    kubernetes啟用PHP+Nginx網(wǎng)頁環(huán)境教程

    這篇文章主要介紹了kubernetes啟用PHP+Nginx網(wǎng)頁環(huán)境教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Nginx中l(wèi)imit_req模塊和limit_conn模塊的使用

    Nginx中l(wèi)imit_req模塊和limit_conn模塊的使用

    本文主要介紹了Nginx中l(wèi)imit_req模塊和limit_conn模塊的使用,通過limit_req和limit_conn模塊,可以有效實(shí)現(xiàn)精確的請求頻率和連接數(shù)控制,下面就來具體介紹一下
    2024-05-05
  • Nginx處理請求時的匹配規(guī)則詳析

    Nginx處理請求時的匹配規(guī)則詳析

    這篇文章主要給大家介紹了關(guān)于Nginx處理請求時的匹配規(guī)則的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 解讀Nginx變量字段大全

    解讀Nginx變量字段大全

    這篇文章主要介紹了Nginx變量字段,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-07-07
  • Nginx 啟動、停止、重啟、升級操作命令收集

    Nginx 啟動、停止、重啟、升級操作命令收集

    也許你不知道什么是Nginx,Nginx是一個WEB服務(wù)器,如IIS那樣,現(xiàn)在好多門戶都在使用了Nginx作為WEB服務(wù)器了,Nginx在Linux系統(tǒng)下跑很優(yōu)秀,強(qiáng)過其它的WEB服務(wù)端,還可以做負(fù)載均衡,很不錯吧。
    2010-10-10
  • Nginx配置并兼容HTTP實(shí)現(xiàn)代碼解析

    Nginx配置并兼容HTTP實(shí)現(xiàn)代碼解析

    這篇文章主要介紹了Nginx配置并兼容HTTP實(shí)現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 如何解決Nginx請求轉(zhuǎn)發(fā)將POST變?yōu)镚ET問題

    如何解決Nginx請求轉(zhuǎn)發(fā)將POST變?yōu)镚ET問題

    這篇文章主要介紹了如何解決Nginx請求轉(zhuǎn)發(fā)將POST變?yōu)镚ET問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 前后臺Nginx部署同域名路徑區(qū)分配置

    前后臺Nginx部署同域名路徑區(qū)分配置

    前后臺共用一個域名部署時,通過不同路徑區(qū)分靜態(tài)文件和API接口,適配VueRouter的歷史模式,保證頁面刷新和路由跳轉(zhuǎn)正常,配置Nginx時注意路徑匹配順序,前端配置路徑必須與Nginx配置一致,proxy_pass后綴不能刪,前后端路徑要對齊
    2026-04-04
  • Nginx?Proxy?Manager配置Web?WAF應(yīng)用防火墻

    Nginx?Proxy?Manager配置Web?WAF應(yīng)用防火墻

    Nginx?Proxy?Manager是一款功能強(qiáng)大的開源軟件,配置Web應(yīng)用防火墻,可以防止常見的web攻擊,本文就來介紹一下Nginx?Proxy?Manager配置Web?WAF應(yīng)用防火墻,感興趣的可以了解一下
    2025-02-02
  • Nginx配置多個HTTPS域名的方法

    Nginx配置多個HTTPS域名的方法

    本篇文章主要介紹了Nginx配置多個HTTPS域名的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論

广河县| 阳朔县| 洛阳市| 汕头市| 栾城县| 来凤县| 宜宾市| 宁安市| 威宁| 永川市| 北流市| 绍兴县| 乌恰县| 宝坻区| 江门市| 镇宁| 兴化市| 新民市| 新河县| 双城市| 祁东县| 江陵县| 黄石市| 姚安县| 潮安县| 汉川市| 汕尾市| 湖南省| 大埔县| 禄丰县| 祁东县| 喀什市| 旬邑县| 琼海市| 澳门| 陆丰市| 辽阳市| 濉溪县| 清流县| 卓尼县| 揭东县|