Nginx作為代理服務


代理服務簡介

 什么是代理服務

  •  代理-代理辦理(代理理財、代理收貨、代理購物等等)。

HTTP請求沒有代理服務的模型圖

HTTP請求具有代理服務的模型圖

 

 代理分類

  • 正向代理
  • 反向代理

正向代理

  •     當局域網不能上網時,可以在瀏覽器設置正向代理滿足上網要求
  •     當我們想通過翻牆訪問國外網站查詢資料,可以在瀏覽器設置正向代理
  •     當服務器只允許某個端的IP訪問(比如googe),所以我們需要請求運行訪問的那個客戶端,在讓其幫我們轉發請求

正向代理模型圖

 

反向代理

  •   服務端有很多工程模塊的時候,需要通過Nginx代理實現流量的分發

反向代理模型圖

 

 反向代理模型圖解釋:

  •     客戶端需要自己去請求DNS獲取服務端地址;
  •     代理是為服務端服務的;
  •     紅色虛線表示防火牆;
  •     配置在服務端,分發客戶端請求到不同的服務端
  •     主要用於服務器集群分布式部署的情況下,反向代理隱藏了服務器的信息

代理區別

  • 區別在於形式上服務的對象不一樣
  • 正向代理代理的對象是客戶端,為客戶端服務
  • 反向代理代理的對象是服務端,為服務端服務

 

代理模式和模塊介紹

Nginx可支持的代理協議

 

 

常見的Nginx作為反向代理支持的協議

 

反向代理模式與Nginx代理模塊

 

常見的Nginx作為正向代理支持的協議

 

注意:

  • 不能支持使用HTTPS協議
  • Nginx使用HTTP協議作為正向代理的協議
  • Nginx使用正向代理范圍比較窄

 

nginx 反向代理

代理服務proxy_pass配置語法

  • Syntax: proxy_pass URL;
  • Default: —
  • Context: locationif in locationlimit_except

反向代理配置場景模擬

假設有兩個服務一個對外暴露,一個不對外暴露只能內部訪問,對外暴露的端口是80,在內部訪問的端口是8080,通過訪問對外暴露的80服務來訪問8080服務

(1)創建兩個HTML靜態資源文件

    http_proxy.html文件

<h1>Welcome to http_proxy!!!!</h1>

 http_proxy_redirect.html 

 <h1>Welcome to http_proxy_redirect_81!!!!</h1>

(2) 編輯location

配置對外暴露的代理

server {
    listen       80;
    server_name  www.zhangbiao.com;
    location ~ /test_proxy.html$ {
        proxy_pass http://127.0.0.1:8080;
    }
}

  

內部才能訪問的服務

server {
    listen       8080;
    server_name  127.0.0.1;
    location / {
        root   /opt/app/code2;
        index  http_proxy_redirect.htm;
    }

  

Nginx作為代理服務_代理配置語法補充

proxy-緩沖區

  • Syntax: proxy_buffering on | off;  
  • Default: proxy_buffering on;
  • Context: http, server, location

擴展:

       proxy_buffer_size-設置緩沖區大小(內存頁大小)

       proxy_buffers-設置緩沖區數量和大小(內存頁數量和大小)

       proxy_busy_buffers_size-設置最大緩沖區大小

proxy-重定向

  •  Syntax:  proxy_redirect default;  proxy_redirect off;  proxy_redirect redirect replacement;
  •  Default: proxy_redirect default;
  •  Context: http, server, location

proxy-頭信息

  • Syntax: proxy_set_header field value;
  • Default: proxy_set_header Host $proxy_host;  proxy_set_header Connection close;
  • Context: http, server, location

 擴展:

       proxy_hide_header-設置隱藏頭信息字段

       proxy_set_body-設置請求體返回信息

proxy-超時

  • Syntax: proxy_connect_timeout time;
  • Default: proxy_connect_timeout 60s;
  • Context: http, server, location

擴展:

       proxy_read_timeout-從代理服務器讀取響應的超時時間

       proxy_send_timeout-設置將請求傳輸到代理服務器的超時時間

代理配置及配置規范

代理通用配置

    location / {
        proxy_pass http://127.0.0.1:8080;
        include proxy_params;
    }

  

proxy_params

proxy_redirect default;

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;

代理配置詳解: 

 proxy_redirect default; 

  • 沒有重定向就配置成默認,除非后端返回301情況下設置成具體重定向地址  

 proxy_set_header Host $http_host;

 proxy_set_header X-Real-IP $remote_addr;

  • 設置字段重新定義或附加到傳遞給代理服務器的請求頭

proxy_connect_timeout 30;

  • 設置代理連接超時時間

proxy_read_timeout 60;

  • 設置從代理服務器讀取響應的超時時間

 proxy_send_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_buffer_size和proxy_buffers指令設置的緩沖區時,響應的一部分可以保存到臨時文件中。 該指令設置臨時文件的最大大小。 一次寫入臨時文件的數據大小由proxy_temp_file_write_size指令設置。

 

    location / {
        index index.jsp;
        proxy_pass   http://hello;    #在這里設置一個代理,和upstream的名字一樣
        #以下是一些反向代理的配置可刪除
        proxy_redirect             off; 
        #后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP
        proxy_set_header           Host $host; 
        proxy_set_header           X-Real-IP $remote_addr; 
        proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for; 
        client_max_body_size       10m; #允許客戶端請求的最大單文件字節數
        client_body_buffer_size    128k; #緩沖區代理緩沖用戶端請求的最大字節數
        proxy_connect_timeout      300; #nginx跟后端服務器連接超時時間(代理連接超時)
        proxy_send_timeout         300; #后端服務器數據回傳時間(代理發送超時)
        proxy_read_timeout         300; #連接成功后,后端服務器響應時間(代理接收超時)
        proxy_buffer_size          4k; #設置代理服務器(nginx)保存用戶頭信息的緩沖區大小
        proxy_buffers              4 32k; #proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置
        proxy_busy_buffers_size    64k; #高負荷下緩沖大小(proxy_buffers*2)
        proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳
    }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM