目前正在學習nginx伺服器的相關知識。以下是我的學習記錄。
文章重點記錄nginx負載平衡。
為了實驗,我習慣性的先上拓撲圖,如下:
我們的案例需求如下,前端nginx做負載平衡,並處理靜態頁面,使用location查詢過濾將動態網頁面交由後端apache伺服器叢集做處理。並由nginx回顯內容輸出。
nginx負載平衡伺服器安裝配置:
- [root@lvs /]# rpm -qa | grep pcre
- pcre-devel-6.6-2.el5_1.7
- pcre-6.6-2.el5_1.7
-
- # pcre的作用是為nginx提供相容perl的正則運算式,使nginx支援HTTP Rewrite模組.
-
- [root@lvs ~]# wget http://nginx.org/download/nginx-0.8.53.tar.gz
- [root@lvs nginx-0.8.53]# ./configure --with-http_stub_status_module
- [root@lvs nginx-0.8.53]# make && make install
- # --with-http_stub_status_module 可以用來啟用nginx的nginxStatus功能,以監控
- nginx目前狀態。
在繼續配置之前,需要先瞭解我們要做什麼。我只想做個基本的實驗來看下nginx的負載平衡是如何工作的,所以我的實驗設計是這樣的。
當我們訪問192.168.182.131/index.html 時,由於是靜態頁面,交給nginx本身處理,如果我們訪問 192.168.182.131/test.php時,配置location匹配 .php 尾碼,並交由後端apache叢集來處理,至於叢集會以什麼樣的方式來處理,後面用到時再說。
- [root@lvs conf]# pwd
- /usr/local/nginx/conf
- [root@lvs conf]# vim nginx.conf
-
- user nobody;
- worker_processes 1;
- # 指定nginx要開啟的進程數,建議一個CPU的核心就處理一個進程,所以如果是4核CPU,就指定4個進程數。
-
- events {
- use epoll;
- worker_connections 1024;
- }
- # use epoll 是指nginx的工作模式,epoll是比較高效的工作模式,對於 #linux/unix平台,
- epoll是首選模式。# worker_connections 是一個進程的最大串連數。由此即可算出最大的客
- 戶端數量:max_client = worker_processes * worker_connections;
-
- http {
- server {
- listen 80;
- server_name 192.168.182.131;
- index index.html;
- root /usr/local/nginx/html;
- charset gb2312;
- upstream MyServer {
- ip_hash;
- server 192.168.182.132:80;
- server 192.168.182.133:80;
- }
- location ~* .*.php$ {
- proxy_pass http://MyServer;
- }
- }
- }
負載平衡的配置是這裡:
- upstream MyServer {
- ip_hash;
- server 192.168.182.132:80;
- server 192.168.182.133:80;
- }
這裡有個地方需要注意,ip_hash是什麼呢?上面我說的要求我們再看一次:當我們訪問192.168.182.131/index.html 時,由於是靜態頁面,交給nginx本身處理,如果我們訪問 192.168.182.131/test.php時,配置location匹配 .php 尾碼,並交由後端apache叢集來處理,至於叢集會以什麼樣的方式來處理,後面用到時再說。
- ip_hash就是upstream的調度演算法之一,以下列舉nginx所支援的常用的3種調度演算法:
-
- ip_hash: 每個請求按訪問IP的hash結果分配,這樣來自同一個IP的訪客固定訪問一個後端伺服器,有效解決了動態網頁存在的session共用問題。
-
- 輪詢: 每個請求按訪問順序分配不同的後端伺服器,如果後端某台伺服器宕機,故障系統被自動剔除,使使用者訪問不受影響 。
-
- weight: 指定輪詢權值,weight值越大,分配到的訪問機率越高,主要用於後端每個伺服器效能不均的情況下。
而location的應用,案例中只舉了很簡單的用法:
- location ~* .*.php$ {
- proxy_pass http://MyServer;
- }
- 首先應用瞭解location的幾個匹配符:
- 1 = 嚴格匹配這個查詢。如果找到,停止搜尋
- 2 ^~ 匹配路徑的首碼,如果找到,停止搜尋
- 3 ~ 為區分大小寫正則匹配
- 4 ~* 不區分大小寫正則匹配
-
- 所以,代碼中
- location ~* .*.php$ 的意思就是,將.php結尾的url連結,發送到http://MyServer
- 後端伺服器去處理,讓後端去處理。
- 關於location的更深入理解可以看這篇文章: http://blog.csdn.net/fengmo_q/article/details/6683377
配置後端apache叢集伺服器:
- 192.168.182.132 的配置如下:
- [root@lvs3 ~]# yum install httpd -y