Nginx TCP/UDP 代理
阿新 • • 發佈:2019-02-01
這個模組可以實現基於TCP、UDP和Unix域的socket的協議的代理服務。這個 模組是在nginx-1.9 以後版本才新增的模組,如果要使用這個模組的話,要重新編譯這個原始碼,參考之前的的部落格nginx安裝,新增編譯選項--with-stream
。就可以使用 這個模組
配置基於TCP連線和UDP的資料報的反向代理
- 1.建立最頂層的
stream {}
塊
stream{
....
}
- 2.可以在
stream {}
塊中建立一個或多個的server {}
配置項 - 3.在每個
server {}
配置塊中,要填寫listen
目標(IP+埠或是埠),如果是UDP協議還要包括 udp引數。在stream
stream {
server {
listen 12345;
...
}
server {
listen 53 udp;
...
}
...
}
- 4.利用
proxy_pass
選項定義被代理的 伺服器或是上游組
stream {
server {
listen 12345;
#TCP traffic will be proxied to the "stream_backend" upstream group
proxy_pass stream_backend;
}
server {
listen 12346;
#TCP traffic will be proxied a proxied server
proxy_pass backend.example.com:12346;
}
server {
listen 53 udp;
#UDP traffic will be proxied to the "dns_servers" upstream group
proxy_pass dns_servers;
}
...
}
- 5.如果代理伺服器有幾個 網路介面,可以固定一個源IP和源埠去連線上游的伺服器,可以選擇
proxy_bind
欄位去繫結的特定的IP和埠去連線上游的伺服器(這個欄位是可選的)
stream {
...
server {
listen 127.0.0.1:12345;
proxy_pass backend.example.com:12345;
proxy_bind 127.0.0.1:12345;
}
}
這個 選項很可能需 要管理員使用者的許可權去 配置路由表截斷來源被代理伺服器的網路流量 。
+ 6.(這個欄位是可選的),可以調整用來 傳輸代理伺服器和上游組連線資料的雙向記憶體快取區的大小,根據實際傳輸的資料大小進行調整,如果傳輸資料比較少,這樣做可以節省空間,如果資料量 大的可以減少socket read/write的次數
stream {
...
server {
listen 127.0.0.1:12345;
proxy_pass backend.example.com:12345;
proxy_buffer_size 16k;
}
}
配置TCP和UDP負載均衡
- 1.在
top-level stream{}
區塊 裡面可以新增一個或多個upstream{}
的配置項,例如:stream_backend
面向TCP servers和dns_server面向 的 是UDP_servers。
stream {
upstream stream_backend {
...
}
upstream dns_servers {
...
}
...
}
注意:upstream group
一定要在之前 定義
proxy_pass。
+ 2.在upstream
模組,使用server
指令定義每一個upstream
。包括它的域名或是IP地址加上必要的埠號。
stream {
upstream stream_backend {
server backend1.example.com:12345;
server backend2.example.com:12345;
server backend3.example.com:12346;
...
}
upstream dns_servers {
server 192.168.136.130:53;
server 192.168.136.131:53;
...
}
...
}
3.配置負載均衡的方法使用的是上游組,可以指定以下的一種方法:
- round-robin(預設)
- least-conn Nginx選擇當前連線數最少的伺服器
- least_time Nginx選擇最小延時時間和連線數最少的伺服器。最小延時時間是基於以下引數進行運算的
- connect-連線上游伺服器的時間
- first_byte 收到第一位元組的最短時間
last_byte 收到伺服器的響應
upstream stream_backend { least_time first_byte; server backend1.example.com:12345; server backend2.example.com:12345; server backend3.example.com:12346; }
hash的方法,伺服器基於使用者定義值,例如:源IP地址($remote_addr)
upstream stream_backend {
hash $remote_addr;
server backend1.example.com:12345;
server backend2.example.com:12345;
server backend3.example.com:12346;
}
- 4.(可選的)針對每一個上游伺服器 設定固定引數,包括最大連線數,伺服器的權重。
upstream stream_backend {
hash $remote_addr consistent;
server backend1.example.com:12345 weight=5;
server backend2.example.com:12345;
server backend3.example.com:12346 max_conns=3;
}
upstream dns_servers {
least_conn;
server 192.168.136.130:53;
server 192.168.136.131:53;
...
}