項目實戰02:nginx 反向代理負載均衡、動靜分離和緩存的實現
目錄
- 實驗一:實現反向代理負載均衡且動靜分離
- 1、環境準備:
- 2、下載編譯安裝tengine
- 3、設置代理服務器的配置文件
- 4、啟動tengine服務
- 5、開啟後端的web服務
- 6、測試
- 實驗二:nginx實現緩存功能
- 1、環境準備:同上實驗,實驗結構圖如下:
- 2、設置代理服務器的配置文件
- 3、測試:訪問 http://172.17.11.11/
總項目流程圖,詳見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調試模式下,看到自己設置的特定頭部存在
緩存目錄也生成了緩存
項目實戰02:nginx 反向代理負載均衡、動靜分離和緩存的實現