Nginx實用指南

Nginx實用指南

Nginx是什麼?

官網介紹:nginx

nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev.git

簡單來講:github

Nginx是一個Web服務器。redis

Nginx與其餘服務器對比

Ngix的特色

  • 高性能:

事件驅動的架構:可以併發處理百萬級別的TCP鏈接。數據庫

全異步的網絡I/O處理機制。緩存

極少的進程間切換。安全

  • 模塊化:

高度模塊化的設計和自由的許可證。bash

使得擴展Nginx功能的第三方模塊層出不窮。服務器

  • 跨平臺:

Linux:(sendfile、epoll) Nginx支持其獨有的sendfile系統調用。這個系統調用能夠高效地把硬盤中的數據發送到網絡上(不須要先把硬盤數據複製到用戶態內存上再發送),這極大地減小了內核態與用戶態數據間的複製動做。 epoll是Linux上處理大併發網絡鏈接的利器。cookie

Nginx的進程

多進程的好處:

master只用於管理真正提供服務的worker進程,因此master進程能夠是惟一的,它僅專一於本身的純管理工做,爲管理員提供命令行服務,包括諸如啓動服務、中止服務、重載配置文件、平滑升級程序等。master進程須要擁有較大的權限,例如,一般會利用root用戶啓動master進程。worker進程的權限要小於或等於master進程,這樣master進程才能夠徹底地管理worker進程。

當任意一個worker進程出現錯誤從而致使coredump時,master進程會馬上啓動新的worker進程繼續服務。

多個worker進程處理互聯網請求不但能夠提升服務的健壯性(一個worker進程出錯後,其餘worker進程仍然能夠正常提供服務),最重要的是,這樣能夠充分利用如今常見的SMP多核架構,從而實現微觀上真正的多核併發處理。所以,用一個進程(master進程)來處理互聯網請求確定是不合適的。

另外,爲何要把worker進程數量設置得與CPU核心數量一致呢?這正是Nginx與Apache服務器的不一樣之處。在Apache上每一個進程在一個時刻只處理一個請求,所以,若是但願Web服務器擁有併發處理的請求數更多,就要把Apache的進程或線程數設置得更多,一般會達到一臺服務器擁有幾百個工做進程,這樣大量的進程間切換將帶來無謂的系統資源消耗。而Nginx則否則,一個worker進程能夠同時處理的請求數只受限於內存大小,並且在架構設計上,不一樣的worker進程之間處理併發請求時幾乎沒有同步鎖的限制,worker進程一般不會進入睡眠狀態,所以,當Nginx上的進程數與CPU核心數相等時(最好每個worker進程都綁定特定的CPU核心),進程間切換的代價是最小的。

nginx.conf配置master/worker:

  • 是否以master/worker方式工做: 語法:master_process on|off; 默認:master_process on;

  • worker進程數的配置: 語法:worker_processes number; 默認:worker_processes 1;

  • 設置每一個worker的鏈接數: events { worker_connections 1024; }

Nginx緩存

經過配置緩存,能夠大大下降服務器的壓力,提升響應速度。

Nginx設置靜態資源緩存:

location ~ \.(gif | jpg | jpeg | png | bmp | swf | ico)$ {      root   /www/local/static;
    expires 30d;}
複製代碼

當指定時間時,可使用的單位包括:

  • ms(毫秒)
  • s(秒)
  • m(分鐘)
  • h(小時)
  • d(天)
  • w(周,包含7天)
  • M(月,包含30天)
  • y(年,包含365天)

Nginx反向代理與負載均衡

Nginx提供了3種負載均衡策略:

負載均衡的配置以下:

服務器集羣Session共享問題的解決方案:

  1. 不使用session,換用cookie
  • 優勢:實現起來簡單,方便,也不會加大數據庫的負擔
  • 缺點:依賴客戶端、cookie可複製
  1. session存在數據庫中

MySQL等關係型數據庫:

  • 優勢:安全性比cookie高不少
  • 缺點:加大數據庫的IO,增長數據庫的負擔,請求量較高時體驗很差

redis 或者 memcache 中:

  • 優勢:安全性比cookie高不少,比從文件中讀取要快不少
  • 缺點:會產生內存碎片,若是存儲塊不足,還會產生內存溢出。


Wechat-westcall
相關文章
相關標籤/搜索