溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Nginx 篇章-反向代理

發(fā)布時間:2020-07-15 14:37:28 來源:網(wǎng)絡(luò) 閱讀:4382 作者:JasonMingHao 欄目:系統(tǒng)運維

講述反向七層代理的配置文件以及解釋

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):

看下面一張圖:

Nginx 篇章-反向代理

首先,我們有一個域名 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 篇章-反向代理

這時,我們在前端部署一臺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  
向AI問一下細(xì)節(jié)

免責(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)容。

AI