Nginx學習筆記(三、Nginx反向代理與負載均衡)
阿新 • • 發佈:2020-11-01
目錄:
- 正向代理與方向代理簡介
- 正向代理基本操作指令
- 反向代理基本操作指令
正向代理與方向代理簡介
1、正向代理:內部伺服器訪問外部資源。
外部資源好比外面的因特網,是一個巨大的資源庫,如果不受控制的訪問外部資源那肯定是及其不安全的,容易導致病毒入侵內網。
因此就需要一個擋板或過濾器來限制這種不安全的資源訪問,正向代理便是如此的代理伺服器。
它主要是為了增強區域網內部的網路安全性,使得外網的威脅因素影響不到內部的網路;這裡的代理伺服器起到了防火牆的作用,同時也可以對區域網內的訪問進行必要的監控和管理,正向代理伺服器不支援外部對內部網路的訪問請求。
2、反向代理:外部資源訪問內部伺服器。
它與正向代理相反,如果我們的區域網向Internet提供資源,讓internet上的其他使用者可以訪問我們區域網內部資源,也可以設定一個代理伺服器,他提供的服務就叫做反向代理(Reverse proxy)服務。
正向代理基本操作指令
指令名稱: |
用途: |
resolver |
指定DNS ip地址預設埠53 |
resolver_timeout |
設定解析超時時間 |
proxy_pass |
代理伺服器的協議地址 |
1、resolver:該指令用於指定DNS伺服器的IP地址。
DNS伺服器的主要工作是對域名的解析工作,將域名轉變為對應的ip地址。
1 server { 2 # 設定DNS伺服器的IP 3 # valid:有些情況下我們的資料包在一定的時間內不能被傳遞到目的地,但是又不能讓這個資料包無線的存在,所以我們可以設定一個時間 4 # 當資料包在這段時間內沒有到達目的地就會被丟棄,然後傳送者會受到一個訊息,並且決定要不要重新發送該資料包5 resolver 8.8.8.8 valid = 30s; 6 7 listen 80; 8 server_name localhost; 9 }
2、resolver_timeout指令。
該指令用於設定DNS伺服器解析超時時間。
1 server { 2 resolver 8.8.8.8 valid = 30s; 3 # 設定DNS伺服器的解析超時時間 4 resolver_timeout 100s; 5 6 listen 80; 7 server_name localhost;8 9 #charset koi8-r; 10 }
3、proxy_pass指令。
該指令用於配置代理伺服器的協議的地址,更用於nginx的反向代理服務。
指令:proxy_pass URL(URL指的是設定代理伺服器協議和地址)。
1 server { 2 resolver 8.8.8.8 valid = 30s; 3 resolver_time 100s; 4 5 listen 80; 6 server_name localhost; 7 8 location / { 9 root html; 10 index index.html index.htm; 11 proxy_pass http://$http_host$request_uri; 12 } 13 }
其中代理伺服器協議設定為Http,$http_host和$request兩個變數是Nginx支援的動態獲取主機和uri的變數。
反向代理基本操作指令
1、proxy_pass:設定被代理伺服器的地址。
1 upstream testServer { 2 3 # weight:權重 4 server ip1:8080 weight=1; 5 server ip2:8081 weight=1; 6 7 # 1-2 ip_hash; 伺服器 不會太大 8 # 3-5 session複製; 配置比較麻煩一點 9 # 5以上 redis共享 直接程式碼層次 10 # ip_hash; 11 12 } 13 14 server { 15 16 # 監聽的埠 17 listen 80; 18 server_name localhost; 19 20 #charset koi8-r; 21 22 #access_log logs/host.access.log main; 23 24 # 請求帶有/server的,轉到此處理 25 location /server { 26 # 設定被代理的伺服器:把http://host/server的請求代理到http://testServer執行 27 # http://testServer >>> upstream testServer中的server 28 # 也就是會轉到ip1:8080或ip2:8081處理 29 proxy_pass http://testServer; 30 } 31 32 }
2、proxy_hide_header:配置傳送http響應隱藏的頭域資訊。
1 # field為需要傳送的頭域,該指令可以在http、server、location塊中進行配置 2 proxy_hide_header field;
3、proxy_pass_header:配置頭域資訊。
1 # field指的是哪些檔案將被髮送 2 Proxy_pass_header field;
4、proxy_pass_request_body:配置是否客戶端傳送的請求體傳送給代理伺服器。
1 # 預設為on,開關可以在http塊server或者location塊中進行配置 2 proxy_pass_request_body on|off;
5、proxy_pass_request_headers:配置是否傳送請求頭給代理伺服器。
# 預設為on,開關可以在http塊server或者location塊中進行配置
proxy_pass_request_headers on|off;
6、proxy_set_header:更改nginx伺服器收到的請求頭,然後將新的請求頭髮給代理伺服器。
1 # field你要更改的資訊所在的頭域 2 # value更改的值,支援文字,變數或者說變數的結合 3 proxy_set_header field value; 4 5 # 預設情況下的配置 6 proxy_set_header host $proxy_host; 7 8 # 例項: 9 # 將目前host的值充填成客戶端的地址值 10 proxy_set_header host $http_host; 11 # 將location塊的server_name的指令充填到Host頭域 12 proxy_set_header host $host;
7、proxy_set_body:更改nginx伺服器的請求體。
1 # value是更改的資訊,支援文字變數或者變數的組合 2 proxy_set_body value;
8、proxy_bind:強行將代理主機繫結到指定的ip地址。
1 # ip指的是主機ip(只有0.8.22nginx以上支援) 2 proxy_bind ip;
9、proxy_coonext_timeout:配置nginx伺服器與被代理伺服器建立進階的超時時間。
1 # Time為超時時間預設60s 2 proxy_connect_timeout time;
10、proxy_read_timeout:nginx伺服器向後端被代理伺服器發出read請求後等待響應超時時間。
1 # Time為超時時間預設60s 2 proxy_read_timeout time;
11、proxy_send_timeout:示nginx伺服器向後端發起write請求後等待響應的超時時間。
1 # Time為超時時間預設60s 2 proxy_send_timeout time;
12、proxy_http_version:設定http協議版本。
1 # 版本自己選擇1.0或者1.1穩定一點 2 proxy_http_version 1.0|1.1;
13、proxy_method:設定nginx伺服器請求被代理伺服器時使用的請求方法,一般為post 或者get。
1 # 注意自己選擇get還是post不要加""號 2 proxy_method post|get;
14、proxy_ignore_client_abort:設定客戶端中斷網路請求,nginx伺服器是否中斷被代理的伺服器請求。
1 # 預設off,極少使用資料互動 2 proxy_ignore_client_abort off|on
15、proxy__ignore_headers:設定一些http的響應頭區域 nginx伺服器接收到被代理的伺服器響應時不會被處理設定的頭域。
1 # field 未設定的http響應頭的區域,例如"x-accel-REdirect","x-Accel-Expires"等 2 proxy_ignore_headers field ...