06. Nginx進階-Nginx代理服務

proxy代理功能

正向代理

什么是正向代理?

正向代理(forward proxy),一個位于客戶端和原始服務器之間的服務器。

工作原理

  1. 為了從原始服務器獲取內容,客戶端向代理發送一個請求并指定目標(即原始服務器);
  2. 然后代理服務器向原始服務器轉發請求并獲取內容返回給客戶端,此時客戶端才能使用正向代理。

示意圖

備注

在系統運維工作中很難使用到nginx的正向代理,此處忽略正向代理的學習。

反向代理

什么是反向代理?

反向代理(reverse proxy),一個位于服務端的服務器。

工作原理

  1. 代理服務端接收來自網絡上的連接請求;
  2. 然后將請求轉發給內部網絡的服務端;
  3. 并從服務端獲取結果返回給請求的客戶端;

示意圖

正向代理和反向代理的區別

  1. 位置不同,正向代理架設在客戶端和服務端直接,而反向代理架設在服務端。
  2. 代理對象不同,正向代理是代理的客戶端,服務器不知道實際發起請求的客戶端是誰;而反向代理是代理的服務端,客戶端不知道實際提供服務的服務端是誰。

Nginx反向代理應用

模塊名稱

ngx_http_proxy_module

常見語法

  1. 代理設置
    1. proxy_pass URL:代理后端服務器URL
    2. 適用范圍:location
  2. 緩沖區設置
    1. proxy_buffering on | off:緩沖區的開啟與關閉
    2. 適用范圍:http、server、location
  3. 緩沖區大小設置
    1. proxy_buffer_size size:設置緩沖區的大小
    2. 適用范圍:http、server、location
  4. 緩沖區數量設置
    1. proxy_buffers number size:緩沖區數量大小
    2. 適用范圍:http、server、location
  5. 忙碌的緩沖區大小設置
    1. proxy_busy_buffers_size size:設置忙碌的緩沖區大小
    2. 適用范圍:http、server、location
  6. 頭信息設置
    1. proxy_set_header field value:設置真實客戶端地址
    2. 適用范圍:http、server、location
  7. 連接超時時間設置
    1. proxy_connect_timeout time:連接超時設置
    2. 適用范圍:http、server、location
  8. 讀取超時時間設置
    1. proxy_read_timeout:讀取超時設置
    2. 適用范圍:http、server、location
  9. 發送超時時間設置
    1. proxy_send_timeout timeout:發送超時設置
    2. 適用范圍:http、server、location

應用反向代理

注意:使用的yum的Nginx服務方式實驗。

  1. 配置網站Nginx服務(服務端)

路徑:/etc/nginx/conf.d/wangmingqu.conf
地址:192.168.131.129

server {auth_basic "賬號密碼登錄";auth_basic_user_file /etc/nginx/conf.d/.passwd;listen 80;server_name wang.wangmingqu.com;charset utf-8;location / {root /www/wangmingqu/;index index.html index.htm;}}

測試數據

mkdir -p /www/wangmingqu/
echo "后端提供服務主機" >> /www/wangmingqu/index.html
echo "服務器主機的地址" >> /www/wangmingqu/index.html
  1. 配置代理服務(即proxy端)

路徑:/etc/nginx/conf.d/nginx_proxy.conf
地址:192.168.131.130

server {listen       80;server_name  localhost;location / {proxy_pass http://wang.wangmingqu.com:80;proxy_redirect default;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_connect_timeout 60;proxy_send_timeout 60;proxy_read_timeout 60;proxy_buffering on;proxy_buffer_size 32k;proxy_buffers 4 128k;proxy_busy_buffers_size 256k;proxy_max_temp_file_size 256k;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}}
  1. 訪問測試
nginx -t
systemctl reload nginx

image.png

  1. 觀察日志

可以看到最后一個參數顯示了客戶端的真實IP

192.168.131.130 - wangmingqu [18/Jan/2024:22:00:26 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "192.168.131.1"
  1. 代理配置詳解

代理設置:
proxy_pass http://wang.wangmingqu.com:80;
#代理后端web服務器配置;
#語法格式:proxy_pass URL;
#指定要代理的服務端的協議、地址、端口和URL;
#URL設置方式:http://localhost:80/url/、http://127.0.0.1:80/url/
#可配置區域:location

proxy_redirect default;
#修改web服務器返回的響應頭中的location頭域跟refresh頭域數值;
#語法格式:proxy_redirect [default|off;redirect replacement]
#默認配置:proxy_redirect default;即在轉發時使用默認端口
#可配置區域:http、server、location

客戶端地址設置:
proxy_set_header Host $http_host;
#語法格式:proxy_set_header field value;
#默認設置:proxy_set_header Host $http_host;
#可配置區域:http、server、location
#轉發時是否設置http頭部
#如果web服務器設置了多個虛擬主機,那么必須配置這一項,如果不配置那么只顯示最靠前的站點,按照字母a到z排序。

proxy_set_header X-Real-IP $remote_addr;
#轉發時是否添加真實主機的IP

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#客戶端通過代理訪問后端服務,后端服務通過該變量獲取客戶端的真實IP

超時設置:
proxy_connect_timeout 60;
#語法格式:proxy_connect_timeout 超時時間;
#可配置區域:http、server、location
#Nginx代理與后端服務器連接超時時間
#連接超時設置。

proxy_send_timeout 60;
#語法格式:proxy_send_timeout 超時時間;
#可配置區域:http、server、location
#Nginx代理等待后端服務器的響應時間
#發送超時設置。

proxy_read_timeout 60;
#語法格式:proxy_read_timeout 超時時間;
#可配置區域:http、server、location
#后端服務器數據回傳給Nginx代理的超時時間
#讀取超時設置。

緩存設置:
proxy_buffering on;
#啟用緩沖區設置
#可配置區域:http、server、location

proxy_buffer_size 32k;
#設置Nginx代理保存用戶頭信息的緩沖區大小
#可配置區域:http、server、location

proxy_buffers 4 128k;
#設置緩沖區文件個數及大小
#可配置區域:http、server、location

proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;

proxy緩存功能

簡介

什么是代理緩存?

在代理服務器上開啟的緩存,主要用于減少后端服務器的壓力。

模塊名稱

代理緩存應用

后端服務器

路徑:/etc/nginx/conf.d/wangmingqu.conf
地址:192.168.131.129

server {listen 80;server_name wang.wangmingqu.com;charset utf-8;location / {root /www/wangmingqu/;index index.html index.htm;}}

代理服務器

  1. 子配置文件

路徑:/etc/nginx/conf.d/default.conf
地址:192.168.131.130

#創建緩存存放目錄
mkdir -p /www/nginx_proxy_cache/wangmingqu/
proxy_cache_path /www/nginx_proxy_cache/wangmingqu/ levels=1:2 keys_zone=proxy_wang_cache:10m max_size=10g inactive=60m use_temp_path=off;server {listen 80;server_name locathost;location / {proxy_pass http://wang.wangmingqu.com:80;proxy_redirect default;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_connect_timeout 60;proxy_send_timeout 60;proxy_read_timeout 60;proxy_buffering on;proxy_buffer_size 32k;proxy_buffers 4 128k;proxy_busy_buffers_size 256k;proxy_max_temp_file_size 256k;proxy_cache proxy_wang_cache;proxy_cache_valid 200 304 12h;proxy_cache_valid any 10m;proxy_cache_key $host$uri$is_args$args;add_header Nginx-Cache "$upstream_cache_status";proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;}
}
  1. 配置文件解釋

proxy_cache_path /www/nginx_proxy_cache/wangmingqu/ lavels=1:2 keys_zone=proxy_wang_cache:10m max_size=10g inactive=60m use_temp_path=off;

  • proxy_cache_path:聲明代理緩存路徑信息
  • /www/nginx_proxy_cache/wangmingqu/:緩存數據存放路徑
  • lavels=1:2:緩存時使用幾級目錄存儲,此處為二級目錄存儲
  • keys_zone=proxy_wang_cache:10m:定義一個名字叫proxy_wang_cache的緩存規則,此緩存區規則的大小為10m
  • max_size=10g:定義最大的緩存空間大小為10G
  • inactive=60m:不活躍的緩存60分鐘后會被清除
  • use_temp_path=off:關閉用戶臨時路徑的使用

proxy_cache proxy_wang_cache;

  • 引用定義的緩存配置

proxy_cache_valid 200 304 12h;

  • 定義狀態碼為200、304的數據緩存12個小時

proxy_cache_valid any 10m;

  • 定義其他狀態的數據緩存10分鐘

proxy_cache_key h o s t host hosturi i s a r g s is_args isa?rgsargs;

  • 在存儲用戶信息

add_header Nginx-Cache “$upstream_cache_status”;

  • 緩存狀態返回給客戶端

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

  • 當出現500、502、503、504的錯誤碼時,代理服務會跳過此后端服務器,并將請求發送到其他后端服務器
  1. 驗證緩存服務
nginx -t
systemctl reload nginx

訪問結果
image.png
緩存目錄
image.png

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

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

相關文章

為不同文章形式選擇不同的WordPress文章模板

在寫文章的時候選擇不同的文章形式,然后打開文章的時候會調用不同文章形式的模板。比如,文章形式為video ,就調用single-video.php模板,其它文章形式類似,可以添加多個文章樣式。 //為不同文章形式的內容添加不同的si…

chatgpt-next-web搭建教程,超低成本部署屬于自己的ChatGPT

隨著AI的應用變廣,各類AI程序已逐漸普及,尤其是在一些日常辦公、學習等與撰寫/翻譯文稿密切相關的場景,大家都希望找到一個適合自己的穩定可靠的ChatGPT軟件來使用。 ChatGPT-Next-Web就是一個很好的選擇。它是一個Github上超人氣的免費開源…

Spring AOP在業務中常見的使用方式

目錄 1、動態代理 1.1、jdk動態代理 1.2、cglib動態代理 1.3、動態代理的好處 2、什么是AOP 2.1、AOP常用術語 2.2、切面的構成 3、使用aspectJ框架實現AOP 3.1、aspectJ簡介 聲明實現類ServiceImpl 聲明切面 3.3、AfterReturning后置通知 切面類代碼 3.4、Aroun…

2核4G云服務器租用價格_2核4G云主機優惠價格_2024年報價

租用2核4G服務器費用價格,2核4G云服務器多少錢一年?1個月費用多少?阿里云2核4G服務器30元3個月、輕量應用服務器2核4G4M帶寬165元一年、企業用戶2核4G5M帶寬199元一年;騰訊云輕量2核4G服務器5M帶寬165元一年、252元15個月、540元三…

Spring IOC在業務中常見的使用方式

目錄 1、什么是IOC 2、java實現創建對象的方式有哪些 3、基于配置文件的di實現 3.1、什么是di 3.2、入門案例 3.3、環境搭建 接口和實現類 ioc配置文件 測試程序 3.4、案例總結 3.5、簡單類型屬性的賦值(set注入) set注入要求 JavaBean sp…

前端項??件很?,?且??訪問速度慢,如何在前端側提?性能?

1. 網絡優化 減少HTTP請求的數量,可以通過合并CSS和JavaScript文件來實現。使用CDN(內容分發網絡)來加速靜態資源的加載速度。對圖片進行壓縮,選擇正確的格式,并實現懶加載技術,以減少頁面初次加載時的數據…

代碼隨想錄day12(2)字符串:重復的子字符串(leetcode459)

題目要求:給定一個非空的字符串,判斷它是否可以由它的一個子串重復多次構成。給定的字符串只含有小寫英文字母,并且長度不超過10000。 思路: 一、首先對于暴力解法,可以枚舉所有的字串進行判斷。但是枚舉時實際上只需…

rt thread stdio如何同時生成bin和hex

一、rt thread stdio默認生成bin文件: rt thread stdio 軟件編譯時,默認生成bin文件; 二、rt thread stdio如何同時生成bin和hex 右鍵單擊-->項目-->屬性-->C/C構建-->設置-->構建步驟-->(構建后步驟)命令: …

視頻如何無水印保存?這三種下載方法趕緊收藏

在互聯網時代,視頻已成為我們獲取信息、娛樂休閑的重要途徑。然而,有時我們想要保存或分享某些視頻時,卻發現下載起來卻帶有水印。為了解決這個問題,今天給大家帶來幾個無水印下載的方法。 方法一:水印云 水印云是一…

Python使用模塊和庫編程

歸納編程學習的感悟, 記錄奮斗路上的點滴, 希望能幫到一樣刻苦的你! 如有不足歡迎指正! 共同學習交流! 🌎歡迎各位→點贊 👍 收藏? 留言?📝 路在腳下,勇往直前&#x…

Spring Boot2.2.4版本啟動項目時,訪問登錄接口顯示頁面不存在

問題觸發場景:IDEA 2023.3.4 SpringBoot 2.2.4 上面4張圖片分別是項目結構、Spring Boot啟動配置、SpringMVC配置和頁面展示在項目中存放的位置,表面上看上去沒有太大問題,項目應該會達到預期結果,但是bug總是在不經意間出現&…

MySQL數據庫運維第一篇(日志與主從復制)

文章目錄 一、錯誤日志二、二進制日志三、查詢日志四、慢查詢日志(記錄超時的sql語句)五、主從復制概括六、主從復制原理七、搭建主從復制八、主從復制的測試 在這篇深入的技術文章中,作者將以明晰透徹的方式詳細介紹MySQL數據庫中關鍵的日志…

XGB-16:自定義目標和評估指標

概述 XGBoost被設計為一個可擴展的庫。通過提供自定義的訓練目標函數和相應的性能監控指標,可以擴展它。本文介紹了如何為XGBoost實現自定義的逐元評估指標和目標。 注意: 排序不能自定義 在接下來的兩個部分中,將逐步介紹如何實現平方對數…

【EAI 027】Learning Interactive Real-World Simulators

Paper Card 論文標題:Learning Interactive Real-World Simulators 論文作者:Mengjiao Yang, Yilun Du, Kamyar Ghasemipour, Jonathan Tompson, Leslie Kaelbling, Dale Schuurmans, Pieter Abbeel 作者單位:UC Berkeley, Google DeepMind, …

【 Docker 容器詳細介紹和說明】

Docker 容器詳細介紹和說明 Docker 容器詳細介紹和說明Docker 安裝步驟(以Ubuntu為例):使用Docker創建并運行容器:VSCode遠程連接Docker容器:步驟1:配置Docker環境步驟2:配置PyCharm步驟3&#…

日本發動全面侵華戰爭他們在怕什么?為何不敢動陜西,

日本全面侵華戰爭之謎:恐懼與野心的交織 在二十世紀三十年代,日本帝國主義以令人發指的暴行和殘忍手段,對中國發動了全面侵華戰爭。然而,在這場戰爭中,有一個引人關注的現象:日本侵略者在進攻過程中&#…

python和nodejs一鍵安裝當前項目所有依賴

python和nodejs一鍵安裝當前項目所有依賴。群里有人問怎么快速安裝網上下載的源碼里面的依賴。所以在這里分享一下。更多問題可以自己加群917400262問我。 目錄導航 1.0 python一鍵安裝當前項目所有依賴2.0 nodejs一鍵安裝當前項目所有依賴 1.0 python一鍵安裝當前項目所有依賴…

snakemake: 基礎知識

為了有效地學習和使用 Snakemake,你需要具備一定的基礎知識。這些基礎知識將幫助你更好地理解 Snakemake 的工作原理和如何在你的項目中應用它。以下是學習 Snakemake 所需的一些基礎知識: 1. Python 編程 Snakemake 是用 Python 編寫的,并…

聊聊國內「類Sora模型」發展現狀,和 Sora 的差距到底有多大?

2024 年 2 月 16 日。 就在谷歌發布他新一代的多模態大模型 Gemini 1.5 Pro 的同一天,OpenAI 帶著新一代的文生視頻模型 Sora 再次抓住了全世界人們的眼球。 “顛覆”、“炸裂”、“變天”、“瘋狂”,類似的形容詞一夜之間簇擁在 Sora 周圍,…

網絡傳輸基本流程(封裝,解包)+圖解(同層直接通信的證明),報頭分離問題,協議定位問題,協議多路復用

目錄 網絡傳輸基本流程 引入 封裝 過程梳理 圖解 報文 解包 過程梳理 圖解 -- 同層直接通信的證明 總結 解包時的報頭分離問題 舉例 -- 倒水 介紹 自底向上傳輸時的協議定位問題 介紹 解決方法 協議多路復用 介紹 優勢 網絡傳輸基本流程 引入 首先,我們明確…