日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

Nginx特性验证-反向代理/负载均衡/页面缓存/URL重定向

發(fā)布時(shí)間:2023/12/20 Nginx 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx特性验证-反向代理/负载均衡/页面缓存/URL重定向 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文發(fā)表于cu:2016-08-25

參考文檔:

  • Nginx 反向代理、負(fù)載均衡、頁面緩存、URL重寫等:http://freeloda.blog.51cto.com/2033581/1288553
  • Nginx反向代理/負(fù)載均衡簡單配置:http://www.cnblogs.com/jacktang/p/3669115.html
  • Nginx反向代理,后端web如何獲取真實(shí)ip: http://www.bubuko.com/infodetail-822723.html
  • ?本文針對(duì)Nginx幾個(gè)常用特性做簡單驗(yàn)證(高手請(qǐng)略過),通過簡單的驗(yàn)證熟悉配置。

    一.環(huán)境準(zhǔn)備

    1.?操作系統(tǒng)

    CentOS-7-x86_64-Everything-1511

    2. Nginx版本

    Nginx-1.11.3: http://nginx.org/download/nginx-1.11.3.tar.gz

    安裝配置請(qǐng)見:https://www.cnblogs.com/netonline/p/7327409.html

    3. 拓?fù)鋱D

  • Proxy服務(wù)器為采用VMware ESXi虛擬出的1臺(tái)服務(wù)器,已安裝并啟動(dòng)nginx服務(wù),前段訪問地址x.140.246.55(真實(shí)的互聯(lián)網(wǎng)ip地址,隱去),后端地址172.19.200.215;
  • Web1服務(wù)器為采用Docker技術(shù)生成的1臺(tái)服務(wù)器,已安裝并啟動(dòng)nginx服務(wù),ip地址172.19.200.241;
  • Web2同Web1服務(wù)器,ip地址172.19.200.242;
  • 設(shè)置web1/2測(cè)試頁面(路徑參考nginx安裝步驟),以方便后續(xù)查看驗(yàn)證結(jié)果,如下:

    web1:

    [root@e84e8f6ba866 ~]# echo "<h1>Welcome to test site web1!</h1>"? > /usr/local/nginx/html/index.html

    web2:

    [root @56f610597bcd ~]# echo "<h1>Welcome to test site web2!</h1>" > /usr/local/nginx/html/index.html

  • 二.反向代理

    1. 反向代理說明

    指令:proxy_pass

    語法:proxy_pass URL

    使用字段:location字段

    #URL可以是被代理服務(wù)器的ip地址,ip地址+端口或者被映射的url

    2. 反向代理配置

    #被代理服務(wù)器暫時(shí)設(shè)置web1; #重要:重新加載nginx配置文件,重新加載之前可以通過” /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf”測(cè)試配置文件修改是否正確 [root@localhost ~]# cd /usr/local/nginx/conf/ [root@localhost conf]# vim nginx.conf location / {proxy_pass http://172.19.200.241;} [root@localhost conf]# service nginx reload

    3. 驗(yàn)證

    方式1:通過瀏覽器訪問代理服務(wù)器,返回結(jié)果是web1的測(cè)試頁面,如下:

    方式2:通過curl命令訪問代理服務(wù)器,返回結(jié)果是web1的測(cè)試頁面,如下:

    [root@localhost ~]# curl http://x.140.246.55

    4. 查看web服務(wù)器的訪問日志

    #從訪問日志看到,客戶端ip都是nginx代理服務(wù)器的后端ip,后端web服務(wù)器并沒有捕獲到真實(shí)客戶端ip [root@e84e8f6ba866 ~]# cd /usr/local/nginx/logs/ [root@e84e8f6ba866 logs]# tail -f access.log 172.19.200.215 - - [24/Aug/2016:09:20:49 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36" 172.19.200.215 - - [24/Aug/2016:09:20:49 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36" 172.19.200.215 - - [24/Aug/2016:09:20:52 +0000] "GET / HTTP/1.0" 200 36 "-" "curl/7.29.0" 172.19.200.215 - - [24/Aug/2016:09:20:53 +0000] "GET / HTTP/1.0" 200 36 "-" "curl/7.29.0"

    5. web服務(wù)器捕獲真實(shí)客戶端ip

    1)修改nginx代理服務(wù)器配置

    #”proxy_set_header X-Real-IP $remote_addr”指令將發(fā)送到被代理服務(wù)器的請(qǐng)求頭重新定義或者增加一些字段;此值可以是一個(gè)文本,變量或它們的組合; #proxy_set_header在指定的字段中沒有定義時(shí)會(huì)從它的上級(jí)字段繼承。 [root@localhost ~]# cd /usr/local/nginx/conf/ [root@localhost conf]# vim nginx.conf location / {proxy_set_header X-Real-IP $remote_addr;proxy_pass http://172.19.200.241;} [root@localhost conf]# service nginx reload

    2)修改web服務(wù)器配置

    #”set_real_ip_from IP”指令在http字段內(nèi),但在server字段之外IP為nginx代理服務(wù)器可訪問到后端web服務(wù)器的地址。 [root@e84e8f6ba866 ~]# cd /usr/local/nginx/conf/ [root@e84e8f6ba866 conf]# vim nginx.conf set_real_ip_from 172.19.200.215; [root@e84e8f6ba866 conf]# service nginx reload

    6. 驗(yàn)證捕獲真實(shí)客戶端ip

    #在客戶端使用curl命令訪問代理服務(wù)器,查看后端web服務(wù)器訪問日志; #從訪問日志看到,后端web服務(wù)器已捕獲到真實(shí)客戶端ip [root@e84e8f6ba866 logs]# tail -f access.log

    三.負(fù)載均衡

    1. 負(fù)載均衡說明

    1)upstream模塊

    upstream是Nginx的HTTP Upstream模塊,此模塊通過一個(gè)簡單的調(diào)度算法來實(shí)現(xiàn)客戶端ip到后端服務(wù)器的負(fù)載均衡。

    2)upstream支持的負(fù)載均衡算法

    (1)輪詢(默認(rèn))

    每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端某臺(tái)服務(wù)器宕機(jī),故障系統(tǒng)被自動(dòng)剔除,使用戶訪問不受影響??梢酝ㄟ^weight 指定輪詢權(quán)值,weight值越大,分配到的訪問機(jī)率越高,主要用于后端每個(gè)服務(wù)器性能不均的情況下。

    (2)ip_hash

    每個(gè)請(qǐng)求按訪問ip的hash結(jié)果分配,這樣來自同一個(gè)IP的訪客固定訪問一個(gè)后端服務(wù)器,可有效解決動(dòng)態(tài)網(wǎng)頁存在的session共享問題。

    (3)fair

    比上面兩個(gè)更加智能的負(fù)載均衡算法。此算法可以依據(jù)頁面大小和加載時(shí)間長短智能地進(jìn)行負(fù)載均衡,即根據(jù)后端服務(wù)器的響應(yīng)時(shí)間來分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。Nginx本身不支持fair,如果需要使用這種調(diào)度算法,必須下載Nginx的upstream_fair模塊。

    (4)url_hash

    此方法按訪問url的hash結(jié)果來分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,可進(jìn)一步提高后端緩存服務(wù)器的效率。Nginx本身不支持url_hash,如果需要使用這種調(diào)度算法,必須安裝Nginx 的hash軟件包。

    3)upstream支持的狀態(tài)參數(shù)

    在upstream模塊中,可以在每個(gè)后端服務(wù)器后設(shè)置負(fù)載均衡調(diào)度中的狀態(tài)。常用的狀態(tài)有:

    (1)down

    表示當(dāng)前的server暫時(shí)不參與負(fù)載均衡。

    (2)backup

    預(yù)留的備份機(jī)器,當(dāng)其他所有的非backup機(jī)器出現(xiàn)故障或者忙的時(shí)候,才會(huì)請(qǐng)求backup機(jī)器,因此這臺(tái)機(jī)器的壓力最輕。

    (3)max_fails

    允許請(qǐng)求失敗的次數(shù),默認(rèn)為1。當(dāng)超過最大次數(shù)時(shí),返回proxy_next_upstream 模塊定義的錯(cuò)誤。

    (4)fail_timeout

    在經(jīng)歷了max_fails次失敗后,暫停服務(wù)的時(shí)間,max_fails可以和fail_timeout一起使用。

    2. 負(fù)載均衡配置

    [root@localhost ~]# cd /usr/local/nginx/conf/#upstream模塊在http字段內(nèi), server模塊之外;upstream指定的負(fù)載均衡名可自定義,后面location字段中”proxy_pass”指令調(diào)用自定義的負(fù)載均衡名即可; #weight值默認(rèn)可不用配置,如果后端服務(wù)器性能不均,可以通過weight值負(fù)載調(diào)度; #可以通過backup狀態(tài)參數(shù)預(yù)留備份服務(wù)器; #默認(rèn)使用輪詢調(diào)度算法,如果使用ip_hash調(diào)度算法,后端服務(wù)器的負(fù)載均衡調(diào)度狀態(tài)不能是backup [root@localhost conf]# vim nginx.conf upstream test.backend {# ip_hash;server 172.19.200.241 weight=1;server 172.19.200.242 weight=1;# server 127.0.0.1:8080 backup;}server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {proxy_set_header X-Real-IP $remote_addr; proxy_pass http://test.backend;}}[root@localhost conf]# service nginx reload

    3. 驗(yàn)證

    采用curl命令訪問代理服務(wù)器,交替返回web1與web2的測(cè)試頁面,如下:

    [root@localhost ~]# date ; curl http://x.140.246.55

    四.頁面緩存

    1. 頁面緩存說明

    1)proxy_cache_path

    指令:proxy_cache_path

    語法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];

    使用字段:http字段,server字段之外

    #指令指定緩存的路徑和一些其他參數(shù),緩存的數(shù)據(jù)存儲(chǔ)在文件中,緩存文件使用代理url的哈希值作為關(guān)鍵字與文件名;

    #levels參數(shù)指定指定目錄結(jié)構(gòu),指定緩存的子目錄數(shù),可以使用任意的1位或2位數(shù)字作為目錄結(jié)構(gòu),但最多只能是三級(jí)目錄,格式如X, X:X,或X:X:X,轉(zhuǎn)換為指令如"2", "2:2", "1:1:2"等;

    #所有活動(dòng)的key和元數(shù)據(jù)存儲(chǔ)在共享的內(nèi)存池中,這個(gè)區(qū)域用keys_zone參數(shù)指定。共享池的名稱自定義,共享池的大小可用"m"代表單位;內(nèi)存池的大小按照緩存頁面數(shù)的比例進(jìn)行設(shè)置,一個(gè)頁面(文件)的元數(shù)據(jù)大小按照操作系統(tǒng)來定,如FreeBSD/i386下為64字節(jié),FreeBSD/amd64下為128字節(jié);

    #inactive參數(shù)指定緩存超時(shí)時(shí)間,指定時(shí)間內(nèi)沒有被請(qǐng)求的數(shù)據(jù)則刪除,默認(rèn)inactive為10分鐘;

    #一個(gè)名為cache manager的進(jìn)程控制磁盤的緩存大小,它被用來刪除不活動(dòng)的緩存與控制緩存大小,這些都在max_size參數(shù)中定義,當(dāng)目前緩存的值超出max_size指定的值之后,超過其大小后最少使用數(shù)據(jù)(LRU替換算法)將被刪除。

    2)proxy_cache

    指令:proxy_cache

    語法:proxy_cache zone_name;

    使用字段:http, server, location

    #設(shè)置一個(gè)緩存區(qū)域的(自定義)名稱,一個(gè)相同的區(qū)域可以在不同的地方使用;

    #緩存指令依賴代理緩沖區(qū)(buffers),如果proxy_buffers設(shè)置為off,緩存不會(huì)生效。

    3)proxy_cache_valid

    指令:proxy_cache_valid

    語法: proxy_cache_valid reply_code [reply_code …] time;

    使用字段: http, server, location

    #為不同的應(yīng)答設(shè)置不同的緩存時(shí)間,如:"proxy_cache_valid 200 302 10m;"

    即應(yīng)答代碼為200和302時(shí),設(shè)置緩存時(shí)間為10分鐘;

    #如果只定義時(shí)間:如:"proxy_cache_valid 5m;" 那只對(duì)代碼為200, 301和302的應(yīng)答進(jìn)行緩存;

    #可以使用any參數(shù)應(yīng)答,如:" proxy_cache_valid any 1m;"

    2. 頁面緩存變量說明

    如果不在代理服務(wù)器的配置文件中配置頁面緩存變量,則驗(yàn)證時(shí)查看結(jié)果不方便。

    1)$server_addr

    服務(wù)器地址,在完成一次系統(tǒng)調(diào)用后可確定這個(gè)值;如果要繞開系統(tǒng)調(diào)用,則必須在listen中指定地址并且使用bind參數(shù)。

    2)$upstream_cache_status

    MISS:未命中

    EXPIRED – expired:請(qǐng)求被傳送到后端

    UPDATING – expired:由于proxy/fastcgi_cache_use_stale正在更新,將使用舊的應(yīng)答

    STALE – expired:由于proxy/fastcgi_cache_use_stale超期,后端將得到過期的應(yīng)答

    HIT:命中

    3. 頁面緩存配置

    [root@localhost ~]# cd /usr/local/nginx/conf/#緩存路徑自定義,注意key_zone定義的共享內(nèi)存池與location字段中”proxy_cache”對(duì)應(yīng); #兩個(gè)”add_header”指令增加了頭部,如不設(shè)置,驗(yàn)證時(shí)不方便查看結(jié)果; #”proxy_buffering”如果是”off”,則緩存不生效 [root@localhost conf]# vim nginx.conf proxy_cache_path /usr/local/nginx/cache/testcache levels=1:2 keys_zone=testcache:20m max_size=1g; upstream test.backend {# ip_hash;server 172.19.200.241;server 172.19.200.242;# server 127.0.0.1:8080 backup}server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main; add_header X-Via $server_addr;add_header X-Cache $upstream_cache_status;location / {proxy_set_header X-Real-IP $remote_addr;proxy_pass http://test.backend; # proxy_buffering off;proxy_cache testcache;proxy_cache_valid 200 10m;}}#在”proxy_cache_path”中定義的路徑需要補(bǔ)充完整,并賦予權(quán)限 [root@localhost conf]# mkdir -p /usr/local/nginx/cache/testcache [root@localhost conf]# chown www:www /usr/local/nginx/cache [root@localhost conf]# service nginx reload

    4. 驗(yàn)證

    采用瀏覽器訪問代理服務(wù)器,F5不斷刷新,返回web2(或者web1)的測(cè)試頁面,如下:

  • 按F12可調(diào)用瀏覽器的開發(fā)調(diào)試工具,選擇Network選項(xiàng),可看到Response Headers中,綠色方框中提示:"X-Cache: HIT" (與代理服務(wù)器配置文件中" add_header"有關(guān));
  • 另注意General中,綠色方框中提示:" Status Code:304 Not Modified"。
  • 五.URL重定向

    URL重寫比較復(fù)雜,這里只簡單的驗(yàn)證一下重定向。

    1. URL重寫模塊說明

    重寫模塊Rewrite允許使用正則表達(dá)式重新URI,但需要PCRE的支持,并且可根據(jù)相關(guān)變量重定向和選擇不同的配置。

    如果rewrite指令在server字段中指定,那么將在被請(qǐng)求的location確定之前執(zhí)行;如果在指令執(zhí)行后所選擇的location中有其他的重寫規(guī)則,那么指令也被執(zhí)行。如果在location中執(zhí)行這個(gè)指令產(chǎn)生了新的URI,那么location又一次確定了新的URI,這樣的循環(huán)可最多執(zhí)行10次,超出后nginx將返回500錯(cuò)誤。

    2.?重定向配置

    重定向驗(yàn)證方案:將客戶端到web1上的請(qǐng)求重定向到web2。

    設(shè)計(jì):

  • 將web2從負(fù)載均衡器中取消,負(fù)載均衡器只保留web1;
  • (option) 將nginx反向代理服務(wù)有關(guān)頁面緩存的設(shè)置取消,防止干擾驗(yàn)證結(jié)果;
  • 在web1 的配置文件中設(shè)置重定向規(guī)則。
  • 1)Nginx反向代理服務(wù)配置

    [root@localhost ~]# cd /usr/local/nginx/conf/ [root@localhost conf]# vim nginx.conf upstream test.backend {# ip_hash;server 172.19.200.241 weight=1;# server 172.19.200.242 weight=1;# server 127.0.0.1:8080 backup}server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {proxy_set_header X-Real-IP $remote_addr;proxy_pass http://test.backend;}[root@localhost conf]# service nginx reload

    2)被代理服務(wù)器web1配置

    [root@e84e8f6ba866 ~]# cd /usr/local/nginx/conf/ [root@e84e8f6ba866 conf]# vim nginx.conf location / {root html;index index.html index.htm index.php;rewrite ^/ http://172.19.200.242;}[root@e84e8f6ba866 conf]# service nginx reload

    3. 驗(yàn)證

  • 在客戶端瀏覽器訪問反向代理服務(wù)器:http://x.140.246.55
  • 返回結(jié)果已重定向到web2(這里客戶端能訪問到172.19.200.0網(wǎng)段,如果訪問不到,瀏覽器地址欄重定向到新的地址,但測(cè)試頁面返回錯(cuò)誤);
  • 使用開發(fā)調(diào)試工具可看到,訪問反向代理服務(wù)器時(shí),狀態(tài)碼為"302 Moved Temporarily",返回地址已重定向到"172.19.200.242",web2的地址;
  • 重定向后的頁面返回狀態(tài)碼為"200 OK (from cache)"。
  • 轉(zhuǎn)載于:https://www.cnblogs.com/netonline/p/7551910.html

    總結(jié)

    以上是生活随笔為你收集整理的Nginx特性验证-反向代理/负载均衡/页面缓存/URL重定向的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。