Linux技術--負載均衡配置

# Nginx

## 1. nginx可以做什麼?

1. 可針對靜態資源高速高併發訪問及緩存。
2. 可使用反向代理加速,並且可進行數據緩存。
3. 具有簡單負載均衡、節點健康檢查和容錯功能。
4. 支持遠程FastCGI服務的緩存加速。
5. 支持FastCGI、Uwsgi、SCGI、Memcached Servers的加速和緩存。
6. 支持SSL、TLS、SNI。
7. 具有模塊化的架構:過濾器包括gzip壓縮、ranges支持、chunked響應、XSLT、SSI及圖像縮放等功能。在SSI過濾器中,一個包含多個SSI的頁面,如果經由FastCGI或反向代理處理,可被並行處理。


###1.1 作爲WEB服務的話支持 

1. 支持基於名字、端口及IP的多虛擬主機站點。
2. 支持Keep-alive和pipelined連接。
3. 可進行簡單、方便、靈活的配置和管理。
4. 支持修改Nginx配置,並且在代碼上線時,可平滑重啓,不中斷業務訪問。
5. 可自定義訪問日誌格式,臨時緩衝寫日誌操作,快速日誌輪詢及通過rsyslog處理日誌。
6. 可利用信號控制Nginx進程。
7. 支持3xx-5xx HTTP狀態碼重定向。
8. 支持rewrite模塊,支持URI重寫及正則表達式匹配。
9. 支持基於客戶端IP地址和HTTP基本認證的訪問控制。
10. 支持PUT、DELETE、MKCOL、COPY及MOVE等較特殊的HTTP請求方法。
11. 支持FLV流和MP4流技術產品應用。
12. 支持HTTP響應速率限制。
13. 支持同一IP地址的併發連接或請求數限制。
14. 支持郵件服務代理。

###1.2 應用場景

(1)作爲Web服務軟件

(2)反向代理或負載均衡服務

(3)前端業務數據緩存服務

```
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }
                              
```

###1.3  優點

1. 支持高併發:能支持幾萬併發連接(特別是靜態小文件業務環境)。
2. 資源消耗少:在3萬併發連接下,開啓10個Nginx線程消耗的內存不到200MB。
3. 可以做HTTP反向代理及加速緩存,即負載均衡功能,內置對RS節點服務器健康檢查功能,這相當於專業的Haproxy軟件或LVS的功能。
4. 具備Squid等專業緩存軟件等的緩存功能。
5. 支持異步網絡I/O事件模型epoll(Linux 2.6+)。

## 2. apache的特點

1. Apache 2.2版本非常穩定強大,據官方說,Apache 2.4版本性能更強。
2. Prefork模式取消了進程創建開銷,性能很高。
3. 處理動態業務數據時,因關聯到後端的引擎和數據庫,瓶頸不在Apache上。
4. 高併發時消耗系統資源相對多一些。
5. 基於傳統的select模型,高併發能力有限。select 模型 也就是 同步 epoll  異步       
6. 支持擴展庫,可通過DSO、apxs方法編譯安裝額外的插件功能,不需要重新編譯Apache。
7. 功能多,更穩定,更安全,插件也多。
8. 市場份額在逐年遞減。

### 2.1. 網絡模式 

同步網絡模式   select  

每個請求的狀態始終在維護着 (消耗好多資源)

異步網絡模式   epoll  處理服務器端的併發   請求人數越多 服務器肯定吃緊 系統資源也會緊張  I/O效率也會很慢   

不定期將你的請求 篩選出來  直接告訴你    不用挨個select   

epoll  

每個請求  我不再維護你的狀態 如果有請求  就找我  找到了 給你服務 找不到拉倒    

## 3. lighttpd的特點

1. 基於異步網絡I/O模型,性能、併發都與Nginx相近。
2. 擴展庫是SO模式,比Nginx靈活。
3. 目前國內的使用率比較低,安全性沒有Apache和Nginx好。
4. 通過插件(mod_secdownload)可實現文件URL地址加密(優點)。
5. 社區不活躍,市場份額較低。


**圖說三個服務器的性能對比**

![對比](http://wenku.baidu.com/content/38b81d255fbfc77da369b13c?m=677eb0dc3e26a59492c4441651619924&type=pic&src=5dd71ac83defc33aec5890bf2a3391d6.jpg)

## 4. 爲什麼nginx處理併發能力更強?

![併發對比](http://wenku.baidu.com/content/38b81d255fbfc77da369b13c?m=677eb0dc3e26a59492c4441651619924&type=pic&src=04aef6ab446c3a8206bdb42bfa270dd8.jpg)

 ## 5. 如何選擇web服務器?

1. 靜態業務:若是高併發場景,儘量採用Nginx或Lighttpd,二者首選Nginx。
2. 動態業務:理論上採用Nginx和Apache均可,建議選擇Nginx,爲了避免相同業務的服務軟件多樣化,增加額外維護成本。動態業務可以由Nginx兼做前端代理,再根據頁面元素的類型或目錄,轉發到後端相應的服務器進行處理。
3. 既有靜態業務又有動態業務:採用Nginx。

此外,如果併發不是很大,又對Apache很熟悉,採用Apache也是可以的,Apache 2.4版本也很強大,併發連接數也有所增加。總的來說,在滿足需求的前提下,首先選擇自己最擅長的軟件,若發現了更好的軟件,可在掌握新軟件之後逐步替換。雖然動態和靜態業務都傾向於選擇Nginx,但是大前提是自己要熟練掌握Nginx。切記,在工作中不要盲目選擇軟件,這可能最終會導致自己無法控制局面,從而給企業帶來災難性的損失。

## 6. nginx功能模塊說明

Nginx核心功能模塊(Core functionality)

![conf](http://wenku.baidu.com/content/38b81d255fbfc77da369b13c?m=677eb0dc3e26a59492c4441651619924&type=pic&src=a8e3f54faec4cc381bd860c74c8abef9.jpg)

![con](http://wenku.baidu.com/content/38b81d255fbfc77da369b13c?m=677eb0dc3e26a59492c4441651619924&type=pic&src=7e6d94ecab96b43e7d9660894c035cc2.jpg)

## 7. nginx虛擬站點配置方式

如果在Ubuntu16.04下使用apt安裝nginx,安裝完畢後其工作目錄設置如下:

- nginx站點配置目錄:/etc/nginx/
  - 其中主配置爲nginx.conf
  - sites-available子目錄存放站點配置文件,其中有一個default文件爲虛擬站點的配置模板,自己的虛擬站點可以以此爲模板進行配置。
  - sites-enabled子目錄存放一個對應站點配置文件的軟連接。必須在sites-availabel生成站點的配置文件,然後到sites-enabled添加對應的軟連接。
- 默認站點根目錄 :  /var/www/html/
- 日誌文件目錄:/var/log/nginx/
  - error.log記錄站點的錯誤,如果要查看詳細的錯誤信息,可以打開該文件查看

以www.blog.com站點爲例說明多個虛擬站點配置的方法:

~~~
#1.首先切換目錄到sites-available目錄
cd /etc/nginx/sites-available

#2.複製虛擬站點配置模板,生成自己虛擬站點的配置文件
sudo cp default www.blog.com.conf  

#3 編輯模板
#---------------------以下爲配置內容-------------------
server {
        listen 80; #監聽端口

       #站點的根目錄
        root /var/www/html/www.blog.com;

        # Add index.php to the list if you are using PHP
        #網站默認首頁打開順序
        index index.html index.htm; 
        
        #站點名稱,可以有多個名稱,中間用空格隔開
        server_name www.blog.com blog.com; 
}

#------------------到此結束------------------------------
#這個模板比較簡單,如果有複雜的要求,請以此爲基礎進行改進

#4 保存退出
:wq

#5 切換到sites-enabled目錄下,創建軟連接
cd ../sites-enabled
sudo ln -s /etc/nginx/sites-available/www.blog.com.con   www.blog.com.conf

#6 重啓nginx服務
sudo service nginx restart  (start/stop)
或者
sudo /etc/init.d/nginx restart

#7 切換到站點根目錄(根據你自己的設定進行),我假定站點根目錄是/var/www/html
cd /var/www/html
sudo chmod -R 755 www.blog.com
#編輯index.html

<html>
<head>
<meta charset='utf-8'>
<title>瘋狂程序員的博客</title>
</head>
<body>

<h1>瘋狂的程序員</h1>

</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章