您好,登錄后才能下訂單哦!
講述反向七層代理的配置文件以及解釋
Nginx官網(wǎng):https://www.nginx.com/
Centos yum安裝nginx
yum install nginx -y
so,我們先提個問題,What?為何要用Nginx實現(xiàn)七層代理,什么是七層代理?
1、有無nginx proxy的區(qū)別
傳統(tǒng)無nginx web架構(gòu):
看下面一張圖:
首先,我們有一個域名 www.test_app.com,后端有三臺服務(wù)器,都運行PHP+Nginx服務(wù),如果要實現(xiàn)三臺服務(wù)器都提供網(wǎng)站服務(wù),我們需要具備下面幾個條件(缺點)。
1、每臺web服務(wù)器都需要有固定的公網(wǎng)IP地址(成本高)
2、一個域名需要對應(yīng)多個公網(wǎng)IP(擴展性差)
3、每添加一臺web服務(wù)器都需要動用dns配置以及購買固定公網(wǎng)IP(靈活性差)
so,缺點很明顯了
nginx proxy架構(gòu):
這時,我們在前端部署一臺nginx proxy(反向代理),就可以解決剛才上面所說的問題,可以在nginx proxy配置proxy pool,稱為代理池,里面填寫后端web節(jié)點的IP:PORT,每次擴展一臺Web節(jié)點的時候,只需要在該proxy pool中添加IP:PORT,然后在reload一下nginx即可,并且該nginx proxy只需要有一個固定的公網(wǎng)IP即可,DNS只需要綁定該公網(wǎng)IP
2、Nginx Proxy簡介
Nginx的負(fù)載均衡功能依賴于ngx_http_upsteam_module模塊,所支持的代理方式包括proxy_pass,fastcgi_pass,memcached_pass等,新版Nginx軟件支持的方式有所增加。本文主要講解proxy_pass代理方式。
ngx_http_upstream_module模塊允許Nginx定義一組或多組節(jié)點服務(wù)器組,使用時可以通過proxy_pass代理方式把網(wǎng)站的請求發(fā)送到事先定義好的對應(yīng)Upstream組的名字上,具體寫法為“proxy_pass http:// www_server_pools”,其中www_server_pools就是一個Upstream節(jié)點服務(wù)器組名字。
upstream模塊內(nèi)部server標(biāo)簽部分參數(shù)說明:
模塊參數(shù) | 說明 |
---|---|
server | 負(fù)載均衡后面的RS地址,可域名或IP |
weight | 服務(wù)器權(quán)重,權(quán)重數(shù)字越大表示請求越多,默認(rèn)為1 |
max_fils | 嘗試連接后端節(jié)點失敗的次數(shù),默認(rèn)為1 |
backup | 表示節(jié)點作為備份服務(wù)器 |
fail_timeout | 在max_fails定義次數(shù)失敗后,距離下次檢查間隔時間 |
3、Nginx Proxy調(diào)度算法
靜態(tài)調(diào)度算法:
算法 | 說明 |
---|---|
rr | 輪詢,默認(rèn)調(diào)度算法,將請求按順序分配到不同的后端節(jié)點 |
wrr | 權(quán)重輪詢,權(quán)重值越大,后端節(jié)點接受的請求也就越多 |
ip_hash | 會話保持,每個請求按照客戶端的IP的Hash結(jié)果來分配后端節(jié)點 |
動態(tài)調(diào)度算法:
算法 | 說明 |
---|---|
fair | 響應(yīng)時間,根據(jù)后端節(jié)點的響應(yīng)時間來分配請求 |
least_conn | 最小連接數(shù),根據(jù)后端節(jié)點的連接數(shù)來分配請求 |
url_hash | web緩存節(jié)點,根據(jù)訪問的URL的hash結(jié)果來分配請求 |
注意調(diào)度算法只能使用一種
nginx proxy常見配置文件(多域名):
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 這是代理池,池子名:blog_server_pools,將web節(jié)點的IP:PORT/域名 添加到此即可
upstream blog_server_pools {
server 172.16.1.7:80 weight=3 max_fils=3 fail_timeout=5;
server 172.16.1.8:80 weight=2 max_fils=3 fail_timeout=5;
server 172.16.1.9:80 weight=1 backup max_fils=3 fail_timeout=5;
}
upstream www_server_pools {
# 使用調(diào)度算法:ip_hash
ip_hash
server 172.16.1.10:80 max_fils=3 fail_timeout=5;
server 172.16.1.11:80 max_fils=3 fail_timeout=5;
server 172.16.1.12:80 weight=1 backup max_fils=3 fail_timeout=5;
}
server {
listen 80;
server_name blog.youngboy.org;
location / {
# 通過proxy_pass 調(diào)用對應(yīng)的代理池
proxy_pass http://blog_server_pools;
# proxy優(yōu)化參數(shù)(下面有解釋)
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
}
}
server {
listen 80;
server_name www.youngboy.org;
location / {
proxy_pass http://www_server_pools;
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
}
}
}
我們會發(fā)現(xiàn)。每添加一個server標(biāo)簽(一個站點),都需要將nginx proxy參數(shù)粘貼一遍,這樣會導(dǎo)致配置冗余
我們可以將proxy優(yōu)化參數(shù)配置寫到一個文件中
# vim /etc/nginx/conf.d/http.proxy
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
在nginx http標(biāo)簽下,使用include來引入剛剛創(chuàng)建的proxy文件
....
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/http.proxy;
....
}
平滑重啟nginx
nginx -s reload
4、Nginx Proxy優(yōu)化參數(shù)
# 設(shè)置http請求header項傳給后端服務(wù)器節(jié)點
proxy_set_header
# 用于指定客戶端請求主體緩沖區(qū)大小
client_body_buffer_size
# 表示反向代理與后端節(jié)點服務(wù)器連接的超時時間,即發(fā)起握手等待響應(yīng)的超時時間
proxy_connect_timeout
# 表示代理后端服務(wù)器的數(shù)據(jù)回傳時間,即在規(guī)定時間內(nèi)服務(wù)器必須傳完所有的數(shù)據(jù),否則,Nginx將斷開這個連接
proxy_sed_simeout
# 設(shè)置Nginx從從代理的后端服務(wù)器獲取信息的時間,表示連接建立成功后,Nginx等待后端服務(wù)器的響應(yīng)時間,其實是Nginx已經(jīng)進入后端的派對之中等候處理的時間
proxy_read_timeout
# 設(shè)置緩沖區(qū)大小,默認(rèn)該緩沖區(qū)大小等于指令proxy_buffers設(shè)置的大小
proxy_buffer_size
# 設(shè)置緩沖區(qū)的數(shù)量和大小。Nginx從代理后端的服務(wù)器獲取的響應(yīng)信息,會防止緩沖區(qū)
proxy_buffers
# 用于設(shè)置系統(tǒng)很忙時可以使用的proxy_buffers大小,官方推薦的大小為proxy_buffers*2
proxy_busy_buffers_size
# 指定proxy緩存臨時文件的大小
proxy_temp_file_write_size
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。