Nginx嚴格訪問代理HTTP資源

為什么80%的碼農都做不了架構師?>>> ??hot3.png

1??? 嚴格訪問

訪問能基于客戶端的IP地址允許或拒絕或使用基于HTTP驗證。

為了允許或拒絕從某個地址及或所有地址的訪問,使用allow和deny指令:

location / {

????deny 192.168.1.2;

????allow 192.168.1.1/24;

????allow 127.0.0.1;

????deny all;

}

?為了啟用驗證,使用auth_basic指令。用戶要么輸入有效的用戶名和密碼獲取網站的訪問。用戶名和密碼必須在auth_basic_user_file指令命名的文件中列出。

server {

????...

????auth_basic "closed website";

????auth_basic_user_file conf/htpasswd;

}

?你能讓網站的一些區域沒有驗證即使你需要整個網站驗證。在非驗證區域配置塊中,在auth_basic指令中包括off參數取消繼承外部配置級別設置。例如,限制整個網站訪問,但有些位置可以公開:

server {

????...

????auth_basic "closed website";

????auth_basic_user_file conf/htpasswd;

?

????location /public/ {

????????auth_basic off;

????}

}

為了聯合IP地址和驗證,使用satisfy指令。默認,設置為all,因此客戶端滿足這兩種類型的條件授予訪問權限。當satisfy指令設置為any,至少滿足一個條件授予訪問權限。因此,如果IP地址是允許的,未驗證的用戶可以訪問,反之亦然。

?location / {

????satisfy any;

?

????allow 192.168.1.0/24;

????deny ?all;

?

????auth_basic ??????????"closed site";

????auth_basic_user_file conf/htpasswd;

}

2??? 限制訪問

可以限制:

  • 每個鍵值的連接數(例如,每個IP地址)

  • 每個鍵值請求速率(在1秒/分鐘期間允許處理的請求數)

  • 連接的下載速度

注意,IP地址能在NAT設備后共享,因此通過IP地址應該是明智的。

2.1??? 限制連接數

為了限制連接數,首先使用limit_conn_zone指令定義鍵并設置共享內存區域參數(worker進程將使用該區域共享鍵值計數器)。作為第一個參數,指定表達式計算為鍵。第二個參數,指定區域的名字和大小。

limit_conn_zone $binary_remote_address zone=addr:10m;

?第二,使用limit_conn指令應用location虛擬服務器或整個http上下文的限制。指定共享內存區域的名字作為第一個參數,允許每個鍵的連接作為第二個參數。

location /download/ {

????limit_conn addr 1;

}

連接數在IP地址基礎上的限制,因為$binary_remote_address變量用作鍵。通過使用$server_name變量限制指定服務器連接數:

http {

????limit_conn_zone $server_name zone=servers:10m;

?

????server {

????????limit_conn servers 1000;

????}

}

?2.2??? 限制請求速率

為了限制請求速率,首先設置鍵和共享內存區域保存計數器。

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

rate參數能指定每秒的請求數(r/s)或沒分鐘的請求數(r/m)。

一旦定義共享內存區域,使用limit_req指令在虛擬服務器或location(或全局,如果需要)為了限制請求速度:

location /search/ {

????limit_req zone=one burst=5;

}

?如果速率超過限制,請求被放入隊列延遲處理。burst參數設置等待處理的最大請求數。超過burst限制的請求Nginx響應503錯誤。

如果burst期間不需要延遲,添加nodelay參數。

limit_req zone=one burst=5 nodelay;

2.3??? 限制帶寬

為了限制每個連接的帶寬,使用limit_rate指令:

location /download/ {

????limit_rate 50k;

}

使用該設置,客戶端將能夠通過單個連接下載內容速度最大為每秒50千字節。然而,客戶端打開各種連接。因此,如果目標是組織下載速度大于指定值,連接的數量也應該限制。例如,每個IP地址一個連接(如果共享區域使用上面指定的):

location /download/ {

????limit_conn addr 1;

????limit_rate 50k;

}

為了只在客戶端下載某一數據之后利用限制,使用limit_rate_after指令。合理允許客戶端快速下載某些數據(例如,文件頭——電影索引),限制下載剩下數據的速率(讓用戶看電影,不下載)。

limit_rate_after 500k;

limit_rate 20k;

下面例子顯示連接數和帶寬限制聯合配置。每個客戶端地址允許最大連接數為5,適合現代瀏覽器打開同時打開三個連接的情況。與此同時,服務下載的location只允許一個連接:

http {

????limit_conn_zone $binary_remote_address zone=addr:10m

?

????server {

????????root /www/data;

????????limit_conn addr 5;

?

????????location / {

????????}

?

????????location /download/ {

????????????limit_conn addr 1;

????????????limit_rate 1m;

????????????limit_rate 50k;

????????}

????}

}

轉載于:https://my.oschina.net/leeck/blog/729563

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542768.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542768.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542768.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java LinkedList公共布爾boolean offerLast(Object o)方法(帶示例)

LinkedList公共布爾布爾offerLast(Object o)方法 (LinkedList public boolean offerLast(Object o) method) This method is available in package java.util.LinkedList.offerLast(Object o). 軟件包java.util.LinkedList.offerLast(Object o)中提供了此方法。 This method is…

csv 字符串_Python實現json轉csv格式

利用Python實現json格式轉換為csv文件格式前言本文是學校的課程設計,這里我沒有用封裝好的json庫來實現,而是把讀進來的文件當一個字符串來處理,核心函數其實是python的eval()類型轉換函數。什么是 JSON?我們要考慮到json格式下key-value對的…

MATLAB學習——常用語句

MATLAB學習——常用語句if語句if endif elseif elseifswitch語句for語句while語句if語句 if end n input(n); if rem(n,2) 0A even endif else n input(n); #輸入空數組判斷為odd if rem(n,2) 0A even elseA odd endif elseif n input(n); if rem(n,2) 0;even els…

mysql 線性表_數據結構之線性表

概要參考《大話數據結構》,把常用的基本數據結構梳理一下。線性表定義線性表(List):零個或多個數據元素的有限序列。若將線性表記為 \((a_1, \cdots, a_{i-1}, a_i, a_{i1}, \cdots, a_n)\),則表中 \(a_{i-1}\) 領先于 \(a_i\),\(…

使用JavaScript修改瀏覽器URL地址欄的實現代碼

現在的瀏覽器里,有一個十分有趣的功能,你可以在不刷新頁面的情況下修改瀏覽器URL;在瀏覽過程中.你可以將瀏覽歷史儲存起來,當你在瀏覽器點擊后退按鈕的時候,你可以沖瀏覽歷史上獲得回退的信息,這聽起來并不復雜,是可以…

ruby array_在Ruby中使用Array.pop和Array.shift方法從Array中刪除元素

ruby arrayRuby Array.pop和Array.shift方法 (Ruby Array.pop and Array.shift methods) If you are reading an article that is related to deleting elements from the instance of Array class then it is expected from you that you are aware of the basic things relat…

python語言百分號的含義_python中百分號意思的是什么

python中百分號意思的是什么 發布時間:2020-07-09 16:38:13 來源:億速云 閱讀:158 python中百分號意思的是什么?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有…

MATLAB學習——矩陣

矩陣矩陣運算算術運算基本算術運算點運算關系運算邏輯運算元素處理取整取模和取余矩陣分析與處理矩陣行列式、秩與跡、特征值分析矩陣的逆與線性方程組求解矩陣的分解與變換矩陣運算 算術運算 基本算術運算 #檢查矩陣階數[n,m] size(A),l length(A) A [1 2;3 4] B [1 1;…

sqldeveloper mysql遷移_通過SQL Developer工具將MySQL數據庫內容遷移至Oracle的步驟

通過SQL Developer工具將MySQL數據庫內容遷移至Oracle的步驟發布時間:2020-06-08 15:52:18來源:51CTO閱讀:210作者:三月本篇文章給大家主要講的是關于通過SQL Developer工具將MySQL數據庫內容遷移至Oracle的步驟的內容&#xff0c…

未能成功加載擴展程序_【JAVA虛擬機(JVM)精髓】09-幾種不同的類加載器

持續更新JVM相關知識,敬請關注:Java虛擬機精髓專欄?zhuanlan.zhihu.com上一節說了下類加載器和類加載過程。這一節我們看下幾種不同的類加載器。JVM支持的類加載器有兩類,分別是引導類加載器和自定義加載器。這里的自定義自定義加載器&#…

Oracle .事物,提交,回滾

事物(transaction) -->作為單個邏輯工作單元執行的一系列操作(要么全部成功要么全部失敗) 提交(commit) -->系列操作全部成功的場合才會執行 回滾(rollback) -->系列操作其…

perl 哈希數組的哈希_第一個元素使用哈希在數組中出現K次

perl 哈希數組的哈希Prerequisite: Hashing data structure 先決條件: 哈希數據結構 Problem statement: 問題陳述: Find the first element occurring K times in the array. 查找數組中出現K次的第一個元素。 Example: 例: Input array…

圖片md5修改工具_如何修改視頻和圖片的MD5,用電腦自帶的命令

首先說下,md5到底是啥,它是一段固定長度的數據。無論原始數據是多長或多短,其MD5值都是128bit。另外md5是確定性,一個原始數據的MD5值是唯一的,同一個原始數據不可能會計算出多個不同的MD5值;類似人類的身份…

iOS - UISearchController

前言 NS_CLASS_DEPRECATED_IOS(3_0, 8_0, "UISearchDisplayController has been replaced with UISearchController")interface UISearchDisplayController : NSObjectavailable(iOS, introduced3.0, deprecated8.0, message"UISearchDisplayController has bee…

浮點數轉換為整數四舍五入_定義宏以將浮點值四舍五入為C中最接近的整數

浮點數轉換為整數四舍五入Given a float value and we have to round the value to the nearest integer with the help of Macro in C language. 給定一個浮點值,我們必須借助C語言中的Macro將其舍入到最接近的整數。 Macro Definition: 宏定義: #def…

c語言遍歷文件內容_C語言學習第28篇---動態內存分配剖析

為什么C語言要動態分配內存的意義?1.C語言中的一切操作都是基于內存的2.變量和數組都是內存的別名---內存分配由編譯器在編譯期間決定的---定義數組的時候必須指定數組長度---數組長度是在編譯期就必須確定的需求:程序運行的過程中,可能需要使…

重啟mysql的命令 linux_linux重啟mysql命令

如何啟動/停止/重啟MySQL一、 啟動方式1、使用 service 啟動:service mysqld start2、使用 mysqld 腳本啟動:/etc/inint.d/mysqld start3、使用 safe_mysqld 啟動:safe_mysqld&二、停止1、使用 service 啟動:service mysqld s…

tomcat 多項目多HOST配置

一、場景&#xff1a;使用一個tomcat部署多個項目&#xff0c;并且分別使用不同域名進行訪問。二、詳細配置tomcat/conf/server.xml 中寫<Engine name"Catalina" defaultHost"localhost">***********************************<Host name"biz…

javascript原型_使用JavaScript的示例報告卡Web應用程序原型

javascript原型Hi! At times, beginners always find it hard getting the application of the theory they learn In programming or a particular language. 嗨&#xff01; 有時&#xff0c;初學者總是很??難在編程或特定語言中應用他們學到的理論。 In this article, we…

vb.net cad 塊表最后的實體_21個繪圖命令+7個技巧,3分鐘讓你成為CAD高手

繪制圖紙需要用到CAD&#xff0c;CAD制圖在生活中也是廣泛運用&#xff0c;那么學習CAD到底難不難呢&#xff1f;在這里要告訴CAD新手們&#xff0c;世上無難事&#xff0c;可以用3分鐘讓你成為CAD高手。21個繪圖命令A&#xff1a;繪圓弧B&#xff1a;定義塊C&#xff1a;畫圓D…