C05S06-Nginx的內置變量和代理

一、常見內置變量

內置變量說明
$uri請求的URL,不包括主機和參數
$request_uri請求的URL,包括主機和參數
$host請求的主機名
$http_user_agent客戶端信息,瀏覽器和操作系統
$remote_addr客戶端IP地址
$remote_port客戶端端口
$server_addr服務端IP地址
$server_port服務端端口
$request_method請求方式
$scheme請求協議
$request_filename請求的資源路徑
$doucument_root請求的資源根目錄
X-Real-IP客戶端的真實IP地址
X-Forwarded-For客戶端IP地址和代理IP地址

二、代理

代理是客戶端和服務端的中間人,客戶端通過代理訪問服務端。代理又分為正向代理和反向代理。從網絡參考模型的角度來看,正向代理屬于七層代理,反向代理包括四層代理和七層代理。

四層代理和七層代理的區別:

  1. 四層代理是基于TCP的代理轉發,基于IP地址和端口的形式實現代理。四層代理無法獲取HTTP請求中的URL信息,只能進行數據轉發。四層代理是由內核進行轉發,速度更快。
  2. 七層代理是基于HTTP的代理轉發,可以處理HTTP的請求和響應,收到HTTP請求后,會根據代理方式將HTTP請求轉發到服務端。可以對HTTP請求進行分析、處理,對請求內容做路由、流量控制、內容過濾等。七層代理是基于應用層代、用戶態處理,速度較慢,但是更加安全可靠。

目前能夠同時進行四層代理和七層代理的應用只有Nginx、Haproxy。

1. 正向代理

正向代理需要對請求進行處理,屬于七層代理。正向代理是面向客戶端的,代理客戶端、隱藏客戶端。客戶端想要訪問網頁,但是無法直接訪問,可以通過正向代理訪問。服務端只知道代理IP地址,不知道客戶端IP地址;客戶端知道代理和服務端的IP地址。

1.1 固定地址正向代理

  1. 新增一個Nginx的server模塊,具體配置如下。

    server {listen 8888;server_name localhost;# 設置DNS解析地址resolver 218.2.135.1 valid=300 ipv6=off;# 設置解析服務超時時間resolver_timeout 3s;# 設置代理服務器讀取數據超時時間proxy_read_timeout 30s;# 設置代理服務器發送數據超時時間proxy_send_timeout 30s;# 設置代理服務器連接服務端超時時間proxy_connect_timeout 30s;# 固定代理地址set $url "www.baidu.com";location / {# 請求轉發proxy_pass http://$url;# 正向代理緩存配置# 設置緩沖區的個數和單個大小proxy_buffers 256 4k;# 不保存響應數據的臨時文件,防止文件過多proxy_max_temp_file_size 0;# 狀態碼是200和302的緩存有效期是1分鐘proxy_cache_valid 200 302 1m;# 狀態碼是301的緩存有效期是1小時proxy_cache_valid 301 1h;# 其他狀態碼的緩存有效期是1分鐘proxy_cache_valid any 1m;}
    }
    
  2. 保存文件后,檢查配置語法是否存在問題,重啟Nginx服務。

    nginx -t
    systemctl restart nginx
    
  3. 在主機的瀏覽器中輸入本機IP和端口,或者使用curl命令獲取網頁,查看是否實現正向代理。

    curl 192.168.1.128:8888
    

1.2 變化地址正向代理

  1. 新增一個Nginx的server模塊,具體配置如下。

    server {listen 8889;resolver 218.2.135.1;resolver_timeout 3s;location / {# 自動設置代理的請求地址proxy_pass $scheme://$http_host$request_uri;# 在請求頭中傳遞客戶端的host信息proxy_set_header Host $http_host;# 設置客戶端請求中包含真實IP地址proxy_set_header X-Real-IP $remote_addr;# 設置客戶端經過的代理地址proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 傳遞客戶端請求的協議信息proxy_set_header X-Forwarded-Proto $scheme;# 傳遞客戶端的主機名proxy_set_header X-Forwarded-Host $host;# 傳遞客戶端的請求端口proxy_set_header X-Forwarded-Port $server_port;proxy_buffers 256 4k;proxy_max_temp_file_size 0;proxy_cache_valid 200 302 1m;proxy_cache_valid 301 1h;proxy_cache_valid any 1m;}
    } 
    
  2. 保存文件后,檢查配置語法是否存在問題,重啟Nginx服務。

    nginx -t
    systemctl restart nginx
    
  3. 使用curl命令通過傳參的方式獲取網頁,查看是否實現正向代理。

    # curl -x 代理URL 目標URL
    curl -x 192.168.1.128:8889 www.baidu.com
    

2. 反向代理

反向代理包含四層代理和七層代理,代理服務端、隱藏服務端。客戶端向代理發起請求,代理根據一定的策略(負載)將請求發送到服務端。客戶端不知道請求的服務端具體IP,代理服務器隱藏了服務端具體的IP地址。

負載均衡是一種流量分發機制,根據算法將流量分發到不同的后端服務器,以實現服務端的高可用,也就是備災。

負載均衡的常見算法:

  • 輪詢:負載均衡默認算法,會將請求輪流分發給后端服務器,適用于后端服務器處理能力相近時。
  • 加權輪詢:根據后端服務器的處理能力賦予不同的權重,處理能力高的服務器權重高,處理能力低的服務器權重低。流量高峰時期可以實現流量分發優化,適用于后端服務器處理能力差異大時。
  • IP Hash:請求后端服務器,會使用Hash算法計算出IP地址的Hash值,然后再把請求發送到對應的后端服務器。如果客戶端IP地址一致,下一次的請求會再次發送到對應的服務端,保證會話的穩定。因此要實現會話保持可以使用ip Hash算法。
  • 最小鏈接數:將請求發送到當前連接較少的后端服務器,這種算法適用于后端服務器處理任務耗時不同的情況,可以有效避免請求集中在處理能力更強的后端服務器。
  • URL Hash:根據URL路徑來計算Hash值,請求的URL路徑相同,客戶端的請求會被發送到同一臺服務器上。

負載均衡的特點:

  1. 根據算法將流量分發給不同的后端服務器。
  2. 客戶端訪問的是代理地址,響應也是來自代理服務器。
  3. 客戶端不了解后端服務器情況,不知道具體的IP地址。
  4. 提高了安全性,后端服務器是隱藏的。
  5. 負載均衡是有緩存的,可以直接訪問緩存,提高響應速度。

2.1 七層反向代理

七層反向代理使用upstream語法,配置在http模塊中,進行請求中的HTTP處理。

  1. 輪詢基本配置。

    在http模塊中定義一個upstream模塊,然后在location模塊調用。輪詢是負載均衡的默認策略,可以不用進行設置。

    upstream backend {server 192.168.1.129;server 192.168.1.130;
    }location / {root   html;index  index.html index.htm;proxy_pass  http://backend;
    }
    
  2. 加權輪詢基本配置。

    在http模塊中定義一個upstream模塊,然后在location模塊調用。通過weight設置權重。

    upstream backend {server 192.168.1.129 weight=3;server 192.168.1.130 weight=1;
    }location / {root   html;index  index.html index.htm;proxy_pass  http://backend;
    }
    
  3. IP Hash基本配置。

    在http模塊中定義一個upstream模塊,然后在location模塊調用。使用ip_hash開啟IP Hash策略。

    upstream backend {ip_hash;server 192.168.1.129;server 192.168.1.130;
    }location / {root   html;index  index.html index.htm;proxy_pass  http://backend;
    }
    
  4. 最小連接數基本配置。

    在http模塊中定義一個upstream模塊,然后在location模塊調用。使用least_conn開啟最小連接數策略,通常還會和權重weight搭配使用。

    upstream backend {least_conn;server 192.168.1.129 weight=3;server 192.168.1.130 weight=2;
    }location / {root   html;index  index.html index.htm;proxy_pass  http://backend;
    }
    
  5. URL Hash基本配置。

    在http模塊中定義一個upstream模塊,然后在location模塊調用。使用hash設置根據URL路徑計算hash值。

    upstream backend {hash $request_uri;server 192.168.1.129;server 192.168.1.130;
    }location / {root   html;index  index.html index.htm;proxy_pass  http://backend;
    }
    

2.2 四層反向代理

四層反向代理使用stream語法,配置全局模塊中。用于流量的轉發,不涉及請求的處理,所以只允許輪詢、加權輪詢和最小連接數等策略。

在配置文件的全局模塊中新增一個stream模塊,其中包括upstream模塊和server模塊。需要注意的是端口號不能夠和http模塊中的server模塊設置的端口號相同,否則會產生端口占用,導致Nginx服務無法正常啟動。

  1. 輪詢基本配置。

    stream {upstream backend {server 192.168.1.129:80;server 192.168.1.130:80;}server {listen 81;proxy_pass backend;}
    }
    
  2. 加權輪詢基本配置。

    stream {upstream backend {server 192.168.1.129:80 weight=3;server 192.168.1.130:80 weight=1;}server {listen 81;proxy_pass backend;}
    }
    
  3. 最小連接數基本配置。

    stream {upstream backend {least_conn;server 192.168.1.129:80;server 192.168.1.130:80;}server {listen 81;proxy_pass backend;}
    }
    

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

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

相關文章

mysql排序問題

mysql 建數據庫時,需要指定 字符集 和 排序規則 建表時,也可以指定 也可以指定具體的字段 安照下面的sql順序執行插入,它們的排序是什么樣的? INSERT into test_sort (uid,create_time) VALUE (d,now()) INSERT into test_sort (u…

JAVA 圖形界面編程 AWT篇(1)

前言 為了應對JAVA課設,小編走上了java的圖形界面編程的道路,通過博客分享自己的學習歷程,并進行筆記的記錄。 AWT(Abstract Window Toolkit)介紹 AWT(抽象窗口工具包)是 Java 最早的圖形用戶界…

vulhub復現CVE-2021-44228log4j漏洞

目錄 一:漏洞概述 二:漏洞原理 三:漏洞利用 lookup功能: JNDI解析器: ldap服務: RMI: 四:漏洞復現 4.1靶場 4.2dnslog測試 4.3部署jndi-injection-exploit 4.4打開監聽端口 4.5觸發請…

ip地址獲取失敗啥意思?ip地址獲取失敗怎么回事

在日常的網絡使用中,我們時常依賴于穩定的IP地址來確保數據的順暢傳輸和設備的正常識別。然而,有時我們會遇到“IP地址獲取失敗”的困擾,這不僅阻礙了我們的網絡訪問,還可能帶來一系列的網絡連接問題。那么,IP地址獲取…

如何在 Android 項目中實現跨庫傳值

背景介紹 在一個復雜的 Android 項目中,我們通常會有多個庫(lib),而主應用程序(app)依賴所有這些庫。目前遇到的問題是,在這些庫中,libAd 需要獲取 libVip 的 VIP 等級狀態&#xf…

非常規使用client-go踩坑記

0x01 背景 編程者總有想偷懶的傾向。至少我的初衷時,盡量復用現有的代碼。但有時也會變得弄巧成拙。 這不,最近需要在一個Go服務里添加一個CRD的緩存等待。熟悉k8s的同學都知道,向 kube-apiserver 提交一個更新,到同一個進程中的…

OpenGL ES詳解——多個紋理實現混疊顯示

目錄 一、獲取圖片紋理數據 二、著色器編寫 1. 頂點著色器 2. 片元著色器 三、綁定和繪制紋理 1. 綁定紋理 2. 繪制紋理 四、源碼下載 一、獲取圖片紋理數據 獲取圖片紋理數據代碼如下: //獲取圖片1紋理數據 mTextureId loadTexture(mContext, R.mipmap.…

java引用相關(四大引用類型,軟引用避免oom,弱引用表,虛引用和引用隊列,可達性分析算法)

1. 什么是引用? 問題:什么是引用?Java中的引用是如何工作的? 答案: 引用 是對象的句柄,用于訪問堆內存中的對象。在Java中,引用變量實際上存儲的是對象的地址,而不是對象本身。通…

十一、容器化 vs 虛擬化-Docker

文章目錄 前言一、Docker 介紹1. 簡介2. 應用場景3. 特點4. Docker和虛擬機之間的區別5. 解決痛點1. 解決依賴兼容2. 解決操作系統環境差異3. 小結 二、Docker 架構三、工作流程五、Docker 核心組件及其工作機制1. Docker 客戶端(Docker Client)2. Docke…

linux學習筆記01 基礎命令

目錄 創建 touch 創建文件 (創建但是不打開) vi / vim 創建文件 (創建一個文件并打開) mkdir 創建文件夾 切換目錄 cd 查看 pwd 查看當前目錄完整路徑 ls 查看目錄信息 dir 查看目錄信息 ll 表示查看目標目錄下的信息 ls -a 查看當前目錄下的…

【深度學習】深刻理解多模態模型CLIP

CLIP(Contrastive Language-Image Pretraining) 是由 OpenAI 提出的一個多模態模型,旨在學習視覺和語言的聯合表示,能夠通過圖像和文本之間的對比學習來實現圖像和文本之間的緊密聯系。CLIP 模型可以通過自然語言描述理解和處理圖…

android 聊天界面鍵盤、表情切換絲滑

1、我們在聊天頁面時候,往往會遇到,鍵盤、表情、其他選擇切換時候頁面會出現掉下來再彈起問題,這是因為,我們切換時候,鍵盤異步導致內容View高度變化,頁面掉下來后,又被其他內容頂起這種很差視覺…

Nginx 緩存系統 proxy_cache詳解

系列文章目錄 提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加 例如:第一章 Python 機器學習入門之pandas的使用 提示:寫完文章后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目…

mysql時間戳格式化yyyy-mm-dd

格式化到 年月日 # 將時間換成列名就行;當前是秒級時間戳,如果是毫秒的 / 1000即可 # SELECT FROM_UNIXTIME(1602668106666.777888999 / 1000,%Y-%m-%d) AS a; # SELECT FROM_UNIXTIME(列名 / 1000,%Y-%m-%d) AS a; SELECT FROM_UNIXTIME(1602668106.666…

PDFMathTranslate,PDF多語言翻譯,批量處理,學術論文,雙語對照(WIN/MAC)

分享一個非常實用的PDF文檔翻譯項目——PDFMathTranslate。作為一個經常逛GitHub的開發者,我總喜歡翻看各種項目附帶的論文,雖然大多時候是瞎研究,但卻樂在其中。該項目能夠完美保留公式、圖表、目錄和注釋,對于需要閱讀外文文獻的…

網絡藥理學:(待更)Alphafold3和批量分子動力學模擬(Desmond、AutoMD)

批量動力學模擬 注意全都需要在類linux平臺上進行 安裝Desmond模塊: https://github.com/Wang-Lin-boop/Schrodinger-Script 安裝AutoMD模塊: Wang-Lin-boop/CADD-Scripts: Scripts for virtual screening, cross docking and protein relax using Sc…

爬蟲基礎之代理的基本原理

在做爬蟲的過程中經常會遇到一種情況,就是爬蟲最初是正常運行、正常抓取數據的,一切看起來都是那么美好,然而一杯茶的工夫就出現了錯誤,例如 403 Forbidden,這時打開網頁一看,可能會看到“您的IP訪問頻率太…

第十七屆山東省職業院校技能大賽 中職組“網絡安全”賽項資源任務書樣題③

第十七屆山東省職業院校技能大賽 中職組“網絡安全”賽項資源任務書樣題③ 模塊A 基礎設施設置與安全加固(200分)A-1 登錄安全加固(Windows, Linux)A-2 Nginx安全策略(Linux)A-3日志監控(Windows)A-4中間件…

鯤鵬麒麟安裝Kafka-v1.1.1

因項目需要在鯤鵬麒麟服務器上安裝Kafka v1.1.1,因此這里將安裝配置過程記錄下來。 環境說明 # 查看系統相關詳細信息 [roottest kafka_2.12-1.1.1]# uname -a Linux test.novalocal 4.19.148 #1 SMP Mon Oct 5 22:04:46 EDT 2020 aarch64 aarch64 aarch64 GNU/Li…

群控系統服務端開發模式-應用開發-登錄退出發送郵件

一、登錄成功發送郵件 在根目錄下app文件夾下controller文件夾下common文件夾下&#xff0c;修改Login.php&#xff0c;代碼如下 <?php /*** 登錄退出操作* User: 龍哥三年風水* Date: 2024/10/29* Time: 15:53*/ namespace app\controller\common; use app\controller\Em…