1. 程式人生 > 實用技巧 >Nginx學習筆記(三、Nginx反向代理與負載均衡)

Nginx學習筆記(三、Nginx反向代理與負載均衡)

目錄:

  • 正向代理與方向代理簡介
  • 正向代理基本操作指令
  • 反向代理基本操作指令

正向代理與方向代理簡介

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 ...