010.Nginx正反代理

来源:https://www.cnblogs.com/itzgr/archive/2020/07/17/13327861.html
-Advertisement-
Play Games

一 Nginx代理 1.1 Nginx代理概述 nginx是一款自由的、開源的、高性能的HTTP伺服器和反向代理伺服器。同時也是一個IMAP、POP3、SMTP代理伺服器。nginx可以作為一個HTTP伺服器進行網站的發佈處理,同時nginx可以作為反向代理進行負載均衡的實現。 1.2 Nginx代 ...


一 Nginx代理

1.1 Nginx代理概述

nginx是一款自由的、開源的、高性能的HTTP伺服器和反向代理伺服器。同時也是一個IMAP、POP3、SMTP代理伺服器。nginx可以作為一個HTTP伺服器進行網站的發佈處理,同時nginx可以作為反向代理進行負載均衡的實現。

1.2 Nginx代理模式

Nginx通常有如下三種代理模式:
  • 正向代理(forward proxy)
  • 反向代理(reverse proxy)
  • 透明代理

1.3 正向代理

正向代理(forward)是一個位於客戶端和原始伺服器(origin server)之間的伺服器,即代理伺服器。為了從原始伺服器取得內容,客戶端向代理伺服器發送一個請求並指定目標原始伺服器,然後代理伺服器向原始伺服器轉交請求並將獲得的內容返回給客戶端。 clipboard 場景一:客戶端訪問本來無法訪問的原始伺服器的資源 clipboard 假設最初客戶端要訪問原始伺服器需要經過R1和R2路由器這樣一個路由節點,如果路由器R1或者路由器R2發生故障(或存在禁止訪問的安全策略等),那麼就無法訪問原始伺服器了。 但是如果客戶端讓代理伺服器去代替自己訪問原始伺服器,由於代理伺服器沒有在路由器R1或R2節點中,而是通過其它的路由節點訪問的原始伺服器,那麼客戶端就可以得到原始伺服器的數據了。 場景二:加速訪問原始伺服器的資源 clipboard 假設客戶端要訪問原始伺服器,經過R1路由器和R2路由器,而R1到R2路由器的鏈路是一個低帶寬鏈路。而客戶端到代理伺服器,從代理伺服器到原始伺服器都是高帶寬鏈路。那麼使用正向代理則可以加速訪問。 場景三:Cache作用 clipboard Cache(緩存)技術和代理服務技術是緊密聯繫的(不光是正向代理,反向代理也使用了Cache(緩存)技術)。 如上圖所示,假設客戶端要訪問原始伺服器某數據A之前,代理伺服器已經通過訪問原始伺服器數據A,那麼代理伺服器會把數據A保存一段時間,此時再次通過代理伺服器訪問數據A,那麼代理伺服器不再訪問原始伺服器,而把緩存的數據A直接發給客戶端。這一技術在Cache中術語就叫Cache命中。 場景四:代理伺服器實現授權控制 clipboard 如上圖所示,防火牆作為網關,用來過濾外網對其的訪問。假設區域網內部客戶端A和客戶端B都設置了代理伺服器。可通過代理伺服器配置客戶端A允許訪問互聯網,而客戶端B不允許訪問互聯網,從而實現不通客戶端的訪問代理授權控制。 場景五:隱藏客戶端蹤跡 clipboard 如上圖所示,原始伺服器並不知道訪問自己的實際的客戶端,因為代理伺服器代替客戶端去直接與原始伺服器進行交互,從而對於原始伺服器而言,客戶端的蹤跡被隱藏了。

1.4 反向代理

反向代理正好與正向代理相反,對於客戶端而言代理伺服器就像是原始伺服器,並且客戶端不需要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端。 場景一:隱藏原始伺服器蹤跡 clipboard 客戶端始終認為它訪問的是原始伺服器而不是代理伺服器,但實用際上反向代理伺服器接受客戶端的應答,從原始資源伺服器中取得客戶端的需求資源,然後發送給客戶端。由於防火牆的作用,只允許代理伺服器訪問原始資源伺服器。對於此環境下,防火牆和反向代理的共同作用保護了原始資源伺服器,對於客戶端而言是透明的。 場景二:負載均衡器 clipboard 當反向代理伺服器存在多個,從而部署為集群,當多個客戶端訪問原始伺服器(原始伺服器也可以是集群)的時候,不同的代理伺服器應答不同的客戶端,然後發送不同的客戶端所需的資源,從而實現負載均衡效果。 提示:Nginx基於反向代理實現負載均衡配置參考《012.Nginx負載均衡》。 場景三:Cache作用 同時反向代理伺服器類似正向代理伺服器一樣擁有Cache的作用,可以緩存原始資源伺服器的資源,而不是每次都要向原始資源伺服器組請求數據,特別對於一些靜態的數據,比如圖片和普通文件,如果這些反向代理伺服器能夠做到和客戶端來自同一個網路,那麼客戶端訪問反向代理伺服器,就會得到很高質量的速度。這正是CDN技術的核心。場景四:正方代理混合場景 clipboard 實際項目操作時,正向代理和反向代理很有可能會存在在一個應用場景中,正向代理代理客戶端的請求去訪問目標伺服器,目標伺服器是一個反向代理伺服器,反向代理了多台真實的業務處理伺服器。

1.5 透明代理

參考:https://www.cnblogs.com/gbq-dog/p/10653054.html。

1.6 常見代理軟體

通常大多數開源代理軟體,都能實現正反代理兩種方式。開源軟體中如squid,既可以做正向代理,也可以實現反向代理。MS ISA也可以用來在Windows平臺下做正向代理。反向代理中最主要的實踐就是WEB服務,如Nginx。

二 代理配置項

2.1 配置語法

語法:proxy_buffering on | off; 預設值:proxy_buffering on; 可配置段:http, server, location 作用:配置proxy緩衝區。 擴展:
  • proxy_buffer_size:設置緩衝區大小(記憶體頁大小)
  • proxy_buffers:設置緩衝區數量和大小(記憶體頁數量和大小)
  • proxy_busy_buffers_size:設置最大緩衝區大小

語法:proxy_redirect default; proxy_redirect off; proxy_redirect redirect replacement; 預設值:proxy_redirect default; 可配置段:http, server, location 作用:配置proxy重定向。 擴展:
語法:proxy_buffering on | off; 預設值:proxy_buffering on; 可配置段:http, server, location 作用:配置proxy緩衝區。 擴展:
語法:proxy_set_header field value; 預設值:proxy_set_header Host $proxy_host; proxy_set_header Connection close; 可配置段:http, server, location 作用:配置proxy頭信息。 擴展:
  • proxy_hide_header:設置隱藏頭信息欄位;
  • proxy_set_body:設置請求體返回信息。

語法:proxy_connect_timeout time; 預設值:proxy_connect_timeout 60s; 可配置段:http, server, location 作用:配置proxy超時。 擴展:
  • proxy_hide_header:設置隱藏頭信息欄位;
  • proxy_set_body:設置請求體返回信息。

三 配置正向代理

3.1 正向代理配置

  1 [root@proxy ~]# vi /etc/nginx/conf.d/reverse.conf
  2 server{
  3     resolver 8.8.8.8;				#配置DNS解析IP地址
  4     resolver_timeout 30s;				#超時時間(5秒)
  5     listen 8080;
  6     access_log  /var/log/nginx/reverse.access.log  main;
  7     error_log   /var/log/nginx/reverse.error.log  warn;
  8     location / {
  9         proxy_pass http://$http_host$request_uri;	#配置正向代理參數
 10         proxy_set_header Host $http_host;		#解決如果URL中帶"."後Nginx 503錯誤
 11         proxy_buffers 256 4k; 			#配置緩存大小
 12         proxy_max_temp_file_size 0;			#關閉磁碟緩存讀寫減少I/O
 13         proxy_connect_timeout 30;			#代理連接超時時間
 14         proxy_cache_valid 200 302 10m;
 15         proxy_cache_valid 301 1h;
 16         proxy_cache_valid any 1m;			#配置代理伺服器緩存時間
 17     }
 18 }
  1 [root@proxy ~]# nginx -t -c /etc/nginx/nginx.conf	#檢查配置文件
  2 [root@proxy ~]# nginx -s reload				#重載配置文件
配置釋義: 不能有hostname。 必須有resolver, 即dns,超時時間(30秒)可選。 配置正向代理參數,均是由 Nginx 變數組成。 提示:配置好後,重啟nginx,以瀏覽器為例,若需要使用這個代理伺服器,則只需將瀏覽器代理設置為http://+伺服器ip地址+:+80即可使用了。 clipboard 參考文檔:https://www.cnblogs.com/gbq-dog/p/10653054.html

四 反向代理配置

4.1 環境預設

主機 作用 備註
proxy2.odocker.com 代理伺服器 反向代理伺服器
www.landiannews.com 原始伺服器 模擬原始伺服器

4.2 配置反向代理

  1 [root@proxy ~]# vi /etc/nginx/conf.d/forward.conf
  2 server {
  3     listen  80;
  4     server_name  forward.linuxds.com;
  5     access_log  /var/log/nginx/forward.access.log  main;
  6     error_log   /var/log/nginx/forward.error.log  warn;
  7     location / {
  8         proxy_pass https://www.landiannews.com/;
  9         index index.html;
 10         proxy_redirect     off;
 11 #        proxy_set_header   Host             $host;
 12         proxy_set_header   X-Real-IP        $remote_addr;
 13         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 14         client_max_body_size       10m;		#允許客戶端請求的最大單文件位元組數
 15         client_body_buffer_size    128k;	        #緩衝區代理緩衝用戶端請求的最大位元組數
 16         proxy_connect_timeout      300;		#nginx跟後端伺服器連接超時時間(代理連接超時)
 17         proxy_send_timeout         300;		#後端伺服器數據回傳時間(代理髮送超時)
 18         proxy_read_timeout         300;		#連接成功後,後端伺服器響應時間(代理接收超時)
 19         proxy_buffer_size          4k;		#設置代理伺服器(nginx)保存用戶頭信息的緩衝區大小
 20         proxy_buffers              4 32k;	        #proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設置
 21         proxy_busy_buffers_size    64k;		#高負荷下緩衝大小(proxy_buffers*2)
 22         proxy_temp_file_write_size 64k;		#設定緩存文件夾大小,大於這個值,將從upstream伺服器傳
 23     }
 24 }
  1 [root@proxy ~]# nginx -t -c /etc/nginx/nginx.conf	#檢查配置文件
  2 [root@proxy ~]# nginx -s reload				#重載配置文件
配置釋義: proxy_set_header X-Real-IP $remote_addr:把源IP【$remote_addr,建立HTTP連接header裡面的信息】賦值給X-Real-IP,從而通過$X-Real-IP來獲取源IP; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for:在nginx作為代理伺服器時,設置的IP列表,會把經過的機器ip,代理機器ip都記錄下來,用【,】隔開。

4.3 測試反向代理

瀏覽器訪問:http://forward.linuxds.com/ clipboard 參考文檔:https://www.runoob.com/w3cnote/nginx-proxy-balancing.html

4.4 其他代理配置語句

proxy_pass:設置代理伺服器的地址,可以是主機名稱、IP地址加埠號等形式。 proxy_pass URL 提示: 1:當代理的是一組伺服器時可以使用 upstream 指令來設置。 2:當URL中含有uri時,(例如 "http://127.0.0.1:8080/"、"http://127.0.0.1:8080/demo.html")不管客戶端訪問的是地址中的uri是什麼,代理伺服器都會代理到URL的地址;當URL中不包含uri時(例如:"http://127.0.0.1:8080"),那麼當客戶端訪問伺服器時,代理伺服器會根據客戶端請求的uri來訪問具體的URL地址。
proxy_pass_request_body on|off:用於配置是否將客戶端請求的請求體發送給代理伺服器。 proxy_pass_request_headers on|off:用於配置是否將客戶端請求的頭信息發送給代理伺服器。 proxy_set_header field value:可以更改nginx接收到的客戶端請求的請求頭信息,然後將新的請求頭信息發送給被代理的伺服器。 proxy_set_body value:ngin接收到客戶端的請求後使用該指令可以修改request中的body體,然後將請求轉發給代理伺服器。 proxy_connect_timeout time:nginx伺服器與被代理伺服器之間嘗試建立連接的的超時時間,預設為60s。 proxy_read_timeot time:nginx伺服器接收被代理伺服器數據時最大的等待時間,預設為60s。 proxy_send_timeout time:nginx伺服器發送數據至被代理伺服器的最大等待時間,例如60s內沒有發出一個位元組則預設斷開連接,預設60s。 proxy_http_version 1.0|1.1:nginx伺服器提供代理服務的http協議版本。 proxy_method method:nginx伺服器設置請求被代理伺服器時使用的請求方法,一般為POST或者GET。 proxy_ignore_client_abort:當客戶端中斷網路請求時,nginx服務是否中斷對代理伺服器的請求,預設off。

五 四層代理配置

5.1 四層代理

nginx-1.9.0 開始支持 TCP 代理,即4層代理,編譯安裝預設不會支持,需要加上 –with-stream 參數編譯。

5.2 環境預設

IP:埠 後端RS 備註
172.24.10.21:8888(nginx01) 172.24.10.22:81(nginx02) 172.24.10.23:81(nginx03) 反向代理81埠Web
172.24.10.21:2222(nginx01) 172.24.10.24:22(nginx04) 反向代理ssh
  1 [root@nginx02 ~]# mkdir /usr/share/nginx/rs/
  2 [root@nginx02 ~]# echo '<h1>Rs172.24.10.22-81</h1>' > /usr/share/nginx/rs/index.html
  3 [root@nginx02 ~]# cat > /etc/nginx/conf.d/rs.conf <<EOF
  4 server {
  5     listen  81;
  6     server_name 172.24.10.22;
  7     location / {
  8         root   /usr/share/nginx/rs;
  9         index  index.html;
 10         access_log  /var/log/nginx/rs.access.log  main;
 11         error_log   /var/log/nginx/rs.error.log  warn;
 12     }
 13 }
 14 EOF
  1 [root@nginx02 ~]# nginx -t -c /etc/nginx/nginx.conf	#檢查配置文件
  2 [root@nginx02 ~]# nginx -s reload			#重載配置文件

  1 [root@nginx03 ~]# mkdir /usr/share/nginx/rs/
  2 [root@nginx03 ~]# echo '<h1>Rs172.24.10.23-81</h1>' > /usr/share/nginx/rs/index.html
  3 [root@nginx03 ~]# cat > /etc/nginx/conf.d/rs.conf <<EOF
  4 server {
  5     listen  81;
  6     server_name 172.24.10.23;
  7     location / {
  8         root   /usr/share/nginx/rs;
  9         index  index.html;
 10         access_log  /var/log/nginx/rs.access.log  main;
 11         error_log   /var/log/nginx/rs.error.log  warn;
 12     }
 13 }
 14 EOF
  1 [root@nginx02 ~]# nginx -t -c /etc/nginx/nginx.conf	#檢查配置文件
  2 [root@nginx02 ~]# nginx -s reload			#重載配置文件

5.3 配置四層代理

  1 [root@nginx01 ~]# cat >> /etc/nginx/nginx.conf << EOF
  2 stream {
  3     upstream myweb {
  4         server 172.24.10.22:81 weight=5 max_fails=1 fail_timeout=10s;
  5         server 172.24.10.23:81;
  6     }
  7     upstream myssh {
  8         hash $remote_addr consistent;
  9         server 172.24.10.24:22;
 10     }
 11 
 12     server {
 13         listen  8888;
 14         proxy_connect_timeout 2s;
 15         proxy_timeout 900s;
 16         proxy_pass myweb;
 17     }
 18 
 19     server {
 20         listen  2222;
 21         proxy_connect_timeout 2s;
 22         proxy_timeout 900s;
 23         proxy_pass myssh;
 24     }
 25 }
 26 EOF
提示:stream和http同等級,因此如上配置需要追加至主配置文件最後。
  1 [root@proxy ~]# nginx -t -c /etc/nginx/nginx.conf	#檢查配置文件
  2 [root@proxy ~]# nginx -s reload				#重載配置文件

5.4 確認驗證

瀏覽器訪問:http://113.31.111.246:8888/。 clipboard
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一 負載均衡概述 1.1 負載均衡介紹 負載均衡是將負載分攤到多個操作單元上執行,從而提高服務的可用性和響應速度,帶給用戶更好的體驗。對於Web應用,通過負載均衡,可以將一臺伺服器的工作擴展到多台伺服器中執行,提高整個網站的負載能力。其本質採用一個調度者,保證所有後端伺服器都將性能充分發揮,從而保持 ...
  • win10 訪問遠程文件夾 此共用需要過時的SMB1協議 你不能訪問此共用文件夾 step1 開放協議 在windows功能中勾選SMB1.0並重啟電腦 step2 修改本地策略 將“啟動不安全的來賓登錄”雙擊開啟並確定 PS windows訪問遠程(區域網)使用\\,其實就是,\為本地路徑,\\為 ...
  • 一 盜鏈 1.1 盜鏈概述 盜鏈指的是在自己的界面展示非本伺服器上的內容,通過技術手段獲得其他伺服器的資源。繞過他人資源展示頁面,在自己頁面向用戶提供此內容,從而減輕自己伺服器的負擔,因為真實的空間和流量來自其他伺服器。 因此,通常為了避免被盜鏈,通常Web伺服器建議配置防盜鏈,其主要防盜鏈思路是能 ...
  • 有時候CentOS工作在無互聯網的環境下,需要在離線環境下安裝一些組件,這次實現的是模擬在離線環境下安裝gcc4.8。 第一步: 先去http://mirrors.aliyun.com/centos/7/isos/x86_64/下載CentOS7的安裝鏡像。 第二步: 用虛擬機安裝CentOS7 1 ...
  • 近日,KubeSphere 社區子項目面向物理機環境的負載均衡器 Porter 正式進入 CNCF Landscape。CNCF Landscape 在雲原生實踐過程中的每個環節幫助用戶瞭解有哪些具體的軟體和產品選擇,Porter 進入 CNCF Landscape,意味著 Porter 正式成為了 ...
  • 在Docker中部署LNMP環境可以分為以下幾個步驟: 安裝Docker 創建鏡像 創建Dockerfile build Docerfile 複製/修改配置文件 運行鏡像,並映射埠 為了方便分散式部署,Nginx、PHP、MySQL和Web目錄會分別放在4個不同的容器中,最後我們會打包成4個鏡像。 ...
  • 概述 因為工作關係,最近有涉及到ADF(Atomic Display Framework)相關的內容,部分內容來自互聯網 ADF(Atomic Display Framework)是Google新增的Display框架,用來替換Framebuffer。 ADF在Android hwcomposer ...
  • connector連接器組件:主要作用負責接收請求,常見的連接器有三種,分別是http連接器,https連接器,和ajp連接器;進入tomcat的請求可分為兩類,一類是來自客戶端瀏覽器的訪問,一類是來自其他web server反代訪問;如果想配置tomcat只能通過代理來訪問,並且不能繞過代理來訪... ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...