項目實戰2.2—nginx 反向代理負載均衡、動靜分離和緩存的實現

来源:http://www.cnblogs.com/along21/archive/2017/11/16/7842729.html
-Advertisement-
Play Games

總項目流程圖,詳見http://www.cnblogs.com/along21/p/7435612.html 實驗一:實現反向代理負載均衡且動靜分離 1、環境準備: 機器名稱 IP配置 服務角色 備註 nginx VIP:172.17.11.11 反向代理伺服器 開啟代理功能 設置監控,調度 rs0 ...


 

  總項目流程圖,詳見http://www.cnblogs.com/along21/p/7435612.html

實驗一:實現反向代理負載均衡且動靜分離

1、環境準備:

機器名稱

IP配置

服務角色

備註

nginx

VIP:172.17.11.11

  

反向代理伺服器

開啟代理功能

設置監控,調度

rs01

RIP:172.17.22.22

後端伺服器

stasic-srv 組

rs02

RIP:172.17.1.7

後端伺服器

stasic-srv 組

rs01

RIP:172.17.77.77

後端伺服器

defautl-srv 組

rs02

RIP:172.17.252.111

後端伺服器

defautl-srv 組

  

2、下載編譯安裝tengine

原因:nginx自帶的監控模式雖然能用,但是很不易理解;tengine的監控模式易設簡單,且是在nginx的二次開發,和nginx差不多

(1)官網下載:http://tengine.taobao.org 還支持中文

解包 tar tengine-2.1.1.tar.gz

cd tengine-2.1.1

(2)下載所依賴的包

yum -y groupinstall "development tools"

yum install openssl-devel -y

yum install pcre-devel -y

  

(3)編譯安裝

./configure --prefix=/usr/local/tengine 指定安裝後的目錄

make && make install

  

3、設置代理伺服器的配置文件

cd /usr/local/tengine/conf

cp nginx.conf /usr/local/tengine/conf/ 若機器上本有nginx,可以把配置文件直接拷過來,沒有也可自己設置

vim nginx.conf 全局段和 http段我就不設置了,預設就好

① 定義upstream:後端server 群

upstream lnmp-srv1 {
        server 172.17.22.22:80;
        server 172.17.1.7:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_send "HEAD / HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
}
upstream lnmp-srv2 {
        server 172.17.77.77:80;
        server 172.17.252.111:80;
        server 172.17.1.7:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_send "HEAD / HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
}

② 在server段的location 段中設置動靜分離

server {
   listen 80;
   location /stats { #設置監聽頁面
   check_status;
 }

    location ~* .jpg|.png|.gif|.jpeg$ {
      proxy_pass http://static-srv;
   }
    location ~* .css|.js|.html|.xml$ {
      proxy_pass http://static-srv;
   }
   location / {
     proxy_pass http://default-srv;
   }
} 

  

4、啟動tengine服務

① 去編譯安裝的路徑開啟服務

cd /usr/local/tengine/sbin/

./nginx 啟動tengine

./nginx -s stop 停止

  ② 也可以添加到開機自啟

cd /usr/lib/systemd/system/nginx.service  添加修改,Centos 7

cd cd /etc/init.d/   Centos 6

 

5、開啟後端的web服務

systemctl start nginx

systemctl start php-fpm

systemctl start mariadb

  

6、測試

(1)測試反向代理是否成功 http://172.17.11.11/ web頁面訪問成功

(2)測試狀態頁面 http://172.17.11.11/stats

  

(3)測試動靜分離

把靜態頁面的後端server組的服務宕機,發現沒有靜態的東西了

  

實驗二:nginx實現緩存功能

需求分析:為什麼需要緩存?

  緩存的最根本的目的是為了提高網站性能, 減輕頻繁訪問數據 , 而給資料庫帶來的壓力 。 合理的緩存 , 還會減輕程式運算時 , 對CPU 帶來的壓力。在電腦現代結構中, 操作記憶體中的數據比操作存放在硬碟上的數據是要快N 個數量級的 , 操作簡單的文本結構的數據 , 比操作資料庫中的數據快N 個數量級 。

  例如: 每次用戶訪問網站, 都必須從資料庫讀取網站的標題, 每讀一次需要15 毫秒的時間, 如果有100 個用戶( 先不考慮同一時間訪問), 每小時訪問10 次, 那麼就需要讀取資料庫1000 次, 需要時間15000 毫秒. 如果把頁面直接變成頁面緩存,則每次訪問就不需要去資料庫讀取,大大提升了網站性能。

原理:

緩存數據分為兩部分( 索引, 數據):
① 存儲數據的索引 ,存放在記憶體中;
② 存儲緩存數據,存放在磁碟空間中;
  分析:如建立a.jpg的緩存,把它的uri作為索引放在記憶體中,實際圖片數據放在磁碟空間中;緩存會有很多,所以索引存放的目錄需分層級,把uri做hash運算,換算成16位進位,取最後一個數作為一級目錄的名稱[0-f];二級目錄可以用隨機最後第2,3位數作為名稱[00-ff];三級目錄以此類推...

  

1、環境準備:同上實驗,實驗結構圖如下:

  

2、設置代理伺服器的配置文件

① 先在http段定義緩存

proxy_cache_path /data/cache levels=1:2:2 keys_zone=proxycache:10m inactive=120s max_size=1g

分析:定義一個緩存,路徑在/data/cache 下;三級目錄,第一級[0-f]隨機數字,第二、三級[00-ff]隨機數字;定義緩存的名字proxycache,緩存大小10M;存活時間120s;在磁碟占用空間最大1G。

  

② 再在server段引用緩存

proxy_cache proxycache; #引用上面定義上的緩存空間,同一緩存空間可以在幾個地方使
用
proxy_cache_key $request_uri; #對uri做hash運算
proxy_cache_valid 200 302 301 1h; #200、302、301響應碼的響應內容的緩存1小時
proxy_cache_valid any 1m; #其它緩存1分
add_header Along-Cache "$upstream_cache_status form $server_addr"; #給請求響應增加一個頭部信息,表示從伺服器上返回的cache

  

3、測試:訪問 http://172.17.11.11/ 

F12調試模式下,看到自己設置的特定頭部存在

緩存目錄也生成了緩存

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第1章 ntp 1.1 ntp簡介 NTP(Network Time Protocol,網路時間協議)是用來使網路中的各個電腦時間同步的一種協議。它的用途是把電腦的時鐘同步到世界協調時UTC,其精度在區域網內可達0.1ms,在互聯網上絕大多數的地方其精度可以達到1-50ms。 1.2 ntp服務 ...
  • 前提 安裝linux系統中遇到一個問題,設置ip以後則ping不通,簡單總結幾步: 1、設置ip 進入 /etc/sysconfig/network-scripts目錄下,修改文件名為ifcfg-eno16777736(或eth0文件) 2、關閉防火牆,臨時關閉service iptables st ...
  • 一、解析Linux應用軟體安裝包通常Linux應用軟體的安裝包有三種:1) tar包,如software-1.2.3-1.tar.gz。它是使用UNIX系統的打包工具tar打包的。2) rpm包,如software-1.2.3-1.i386.rpm。它是RedHat Linux提供的一種包封裝格式。 ...
  • 1. yum install squid2. vi /etc/squid/squid.conf 將http_access deny all 中deny 改為allow,http_port後面的是埠號,預設為3128。可改可不改。3. service squid restart4. 如果有防火牆, ...
  • 1.1.1 chrony簡介 Chrony是一個開源的自由軟體,它能保持系統時鐘與時鐘伺服器(NTP)同步,讓時間保持精確。 它由兩個程式組成:chronyd和chronyc。 chronyd是一個後臺運行的守護進程,用於調整內核中運行的系統時鐘和時鐘伺服器同步。它確定電腦增減時間的比率,並對此進 ...
  • 1、安裝Office2007以上版本。(如安裝的是Office2007需安裝SaveAsPDFandXPS.exe組件) 2、確認網站在IIS內使用的登錄用戶。(如圖所示用戶為IUSR,下麵操作以此用戶為例) 3、打開運行視窗,執行comexp.msc -32 ,打開32位的組件服務。 4、分別設置 ...
  • arch/x86/boot/header.S --> _start --> calll main arch/x86/boot/main.c --> main -- > go_to_protected_mode arch/x86/boot/pm.c --> go_to_protected_mode - ...
  • [20171115]ZEROCONF ROUTE.txt--//如果你檢查linux伺服器的網路配置,就可以發現如下一條路由:# route -n | egrep "169.254|Destination"Destination Gateway Genmask Flags Metric Ref Us ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...