nginx簡述

一、nginx是什麼

Nginx (engine x) 是一個高性能的HTTP和反向代理服

務器,也是一個IMAP/POP3/SMTP服務器。Nginx是

由伊戈爾·賽索耶夫爲俄羅斯訪問量第二的Rambler.ru站

點(俄文:Рамблер)開發的,第一個公開版本0.1.0

發佈於2004年10月4日。

其將源代碼以類BSD許可證的形式發佈,因它的穩定性

、豐富的功能集、示例配置文件和低系統資源的消耗而

聞名。2011年6月1日,nginx 1.0.4發佈。

Nginx是一款輕量級的Web 服務器/反向代理服務器及

電子郵件(IMAP/POP3)代理服務器。其特點是佔有

內存少,併發能力強,事實上nginx的併發能力確實在

同類型的網頁服務器中表現較好,中國大陸使用nginx

網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等

二、nginx特性

跨平臺: Nginx 可以在大多數 Unix like OS編譯運行, 而且也有Windows

的移植版本。 配置異常簡單, 非常容易上手。 配置風格簡單, 神一般的配

置易讀性

高併發連接: 數據複製時, 官方測試能夠支撐5萬併發連接, 在實際生產環

境中跑到2~3萬併發連接數.(這得益於Nginx使用了最新的epoll模型)通信

機制採用epoll模型, 支持更大的併發連接。

master/worker結構: 一個master進程, 生成一個或多個worker進程

功能模塊化: nginx的內部結構是由核心部分和一系列的功能模塊所組成

。 這樣劃分是爲了使得每個模塊的功能相對簡單, 便於開發, 同時也便於

對系統進行功能擴展。

成本低廉: Nginx可實現負載均衡功能, 可以免費使用。 而購買F5 BIG-IP

、 NetScaler等硬件負載均衡交換機則需要十多萬至幾十萬人民幣

內置的健康檢查功能: 如果 Nginx Proxy 後端的某臺 Web 服務器宕機了,

不會影響前端訪問。

節省帶寬: 有緩存模塊, 支持 GZIP 壓縮, 可實現瀏覽器本地緩存的

Header 頭。

穩定性高: 用於反向代理(負載均衡) , 宕機的概率微乎其微

Nginx的特性Nginx的架構Nginx的模塊流程圖

Nginx模塊主要有4種角色:

(1) core(核心模塊):構建

nginx基礎服務、管理其他模塊。

(2) handlers(處理模塊): 用於

處理HTTP請求,然後產生輸出。

(3) load-balancers(負載均衡

模塊):當有多於一臺的後端備選

服務器時,選擇一臺轉發HTTP請

求。

(4) filters(過濾模塊): 過濾

handler產生的輸出。21

Nginx安裝方式

nginx安裝常用兩種方式,yum安裝和源碼包安裝

yum 安裝:通常是在線安裝,好處是安裝方式簡單,不易出錯;常

用的安裝yum源爲epel

源碼包安裝:是先將 nginx 的源碼下載下來,在自己的系統裏編譯

生成可執行文件,然後執行,好處是因爲是在自己的系統上編譯的,

更符合自己系統的性能,也就是說在自己的系統上執行 nginx 服務

性能效率更好。(推薦,需要安裝開發環境)

區別:路徑和啓動方式不同,支持的模塊也不同

三、nginx的模塊

Nginx模塊主要有4種角色:

(1) core(核心模塊):構建

nginx基礎服務、管理其他模塊。

(2) handlers(處理模塊): 用於

處理HTTP請求,然後產生輸出。

(3) load-balancers(負載均衡

模塊):當有多於一臺的後端備選

服務器時,選擇一臺轉發HTTP請

求。

(4) filters(過濾模塊): 過濾

handler產生的輸出。

四、Nginx安裝方式

nginx安裝常用兩種方式,yum安裝和源碼包安裝

yum 安裝:通常是在線安裝,好處是安裝方式簡單,不易出錯;常

用的安裝yum源爲epel

源碼包安裝:是先將 nginx 的源碼下載下來,在自己的系統裏編譯

生成可執行文件,然後執行,好處是因爲是在自己的系統上編譯的,

更符合自己系統的性能,也就是說在自己的系統上執行 nginx 服務

性能效率更好。(推薦,需要安裝開發環境)

區別:路徑和啓動方式不同,支持的模塊也不同。

五、nginx的配置

主配置文件: nginx.conf

擴展相關配置文件: include conf.d/*.conf

協議配置: fastcgi, uwsgi, scgi等協議相關的配置文件

類型配置: mime.types: 支持的mime類型

六、主配置文件結構

main : #主配置段, 也即全局配置段; 正常運行必備配置

優化性能配置, 用於調試和定位的配置。

event {

...

}; 事件驅動相關的配置;

http {

...

}; http/https 協議相關的配置段;

七、Nginx配置文件講解

nginx的主配置文件路徑一般在

/etc/nginx/nginx.conf下(yum安裝

) 或

者源碼安裝指定位置的conf目錄

下, 如

/usr/local/nginx/conf/nginx.conf

配置文件主要配置設置:

main(全區設置)

http(協議配置)

upstream(負載均衡服務器設置)

和server、 location(URL匹配特定

位置設置)

1) 全局配置

#Nginx的worker進程運行用戶以及用戶組

user nobody nobody;

#Nginx開啓的進程數

worker_processes 2;

worker_processes auto;

#也可以下參數指定了哪個cpu分配給哪個進程,

#worker_processes 4 #4核CPU

#worker_cpu_affinity 0001 0010 0100 1000

#定義全局錯誤日誌定義類型, [debug|info|notice|warn|crit]

error_log logs/error.log info;

#指定進程ID存儲文件位置

pid logs/nginx.pid;

2) 服務配置

非虛擬主機的配置或公共配置, 需要定義在server之外, http之內;

http {

directive value;

...

server {

}s

erver {

}

...

}}必

須使用虛擬主機來配置站點; 每個虛擬主機使用一個server {}段配置;

server {

}

3)http段參數介紹

1. #文件擴展名與文件類型映射表

2. include mime.types;

3. #默認文件類型

4. default_type application/octet-stream;

6.#日誌相關定義

7. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '

8. # '$status $body_bytes_sent "$http_referer" '

9. # '"$http_user_agent" "$http_x_forwarded_for"';

10. #定義日誌的格式。 後面定義要輸出的內容。

11. #1.$remote_addr 與$http_x_forwarded_for 用以記錄客戶端的ip地址;

12. #2.$remote_user : 用來記錄客戶端用戶名稱;

13. #3.$time_local : 用來記錄訪問時間與時區;

14. #4.$request : 用來記錄請求的url與http協議;

15. #5.$status : 用來記錄請求狀態;

16. #6.$body_bytes_sent : 記錄發送給客戶端文件主體內容大小;

17. #7.$http_referer : 用來記錄從那個頁面鏈接訪問過來的;

18. #8.$http_user_agent : 記錄客戶端瀏覽器的相關信息

19. #連接日誌的路徑, 指定的日誌格式放在最後。

20. #access_log logs/access.log main;

21. #只記錄更爲嚴重的錯誤日誌, 減少IO壓力

22. error_log logs/error.log crit;

http段參數介紹30

26. #默認編碼

27. #charset utf-8;

28. #服務器名字的hash表大小

29. server_names_hash_bucket_size 128;

30. #客戶端請求單個文件的最大字節數

31. client_max_body_size 8m;

32. #指定來自客戶端請求頭的hearerbuffer大小

33. client_header_buffer_size 32k;

34. #指定客戶端請求中較大的消息頭的緩存最大數量和大小。

35. large_client_header_buffers 4 64k;

36. #開啓高效傳輸模式。

37. sendfile on;

38. #防止網絡阻塞

39. tcp_nopush on;

40. tcp_nodelay on;

41. #客戶端連接超時時間, 單位是秒

42. keepalive_timeout 60;

43. #客戶端請求頭讀取超時時間

44. client_header_timeout 10;

45. #設置客戶端請求主體讀取超時時間

46. client_body_timeout 10;

47. #響應客戶端超時時間

48. send_timeout 10;

50.#FastCGI相關參數是爲了改善網站的性能: 減少資源佔用, 提高訪問速度。

51. fastcgi_connect_timeout 300;

52. fastcgi_send_timeout 300;

53. fastcgi_read_timeout 300;

54. fastcgi_buffer_size 64k;

55. fastcgi_buffers 4 64k;

56. fastcgi_busy_buffers_size 128k;

57. fastcgi_temp_file_write_size 128k;

59.#gzip模塊設置

60. #開啓gzip壓縮輸出

61. gzip on;

62. #最小壓縮文件大小

63. gzip_min_length 1k;

64. #壓縮緩衝區

65. gzip_buffers 4 16k;

66. #壓縮版本(默認1.1, 前端如果是squid2.5請使用1.0)

67. gzip_http_version 1.0;

68. #壓縮等級 1-9 等級越高, 壓縮效果越好, 節約寬帶, 但CPU消耗大

69. gzip_comp_level 2;

70. #壓縮類型, 默認就已經包含text/html, 所以下面就不用再寫了, 寫上去也不會有問題, 但是會有一個warn。

71. gzip_types text/plain application/x-javascript text/css application/xml;

72. #前端緩存服務器緩存經過壓縮的頁面

73. gzip_vary on;

4)虛擬主機相關介紹

虛擬主機相關的配置:

1、 server {}

定義一個虛擬主機; nginx支持使用基於主機名或IP的虛擬主機;

2、 listen

listen address[:port];

listen port

default_server: 定義此server爲http中默認的server; 如果所有的server中沒有任何一個

listen使用此參數, 那麼第一個server即爲默認server;

3、 server_name [...];

server_name可以跟多個主機名, 名稱中可以使用通配符和正則表達式(通常以~開頭); 當

nginx收到一個請求時, 會取出其首部的server的值, 而後跟衆server_name進行比較;

比較優先次序方式:

(1) 先做精確匹配; www.magedu.com

(2) 左側通配符匹配; *.magedu.com

(3) 右側通配符匹配; www.abc.com, www.*

(4) 正則表達式匹配: ~^.*\.magedu\.com$

test.test.magedu.com

test.magedu.com/text

www.taobao.com

5)文件路徑定義相關介紹

server段內

1、 root path

設置web資源路徑; 用於指定請求的根文檔目錄;

location / {

root /www/htdocs;(本機的文件路徑)

}lo

cation ^~ /p_w_picpaths/ {

root /web;

} 2

、 alias path

只能用於location中, 用於路徑別名;

location / {

root /www/htdocs;

}lo

cation ^~ /p_w_picpaths/ {

alias /web/;

}

6)虛擬主機相關介紹

(1)location [ = | ~ | ~* | ^~ ] uri { ... }

(2)location @name { ... }

功能: 允許根據用戶請求的URI來匹配指定的各location以進行訪

問配置; 匹配到時, 將被location塊中的配置所處理

=: 精確匹配;

~: 正則表達式模式匹配, 匹配時區分字符大小寫

~*: 正則表達式模式匹配, 匹配時忽略字符大小寫

^~: URI前半部分匹配, 匹配時忽略字符大小寫。 不檢查正則表達

式 匹

配優先級:

= (大於) ^~ (大於) ~ (大於) 不帶符號

7)文件路徑定義相關介紹

(1) index file ...;

定義默認頁面, 可參跟多個值;

(2) error_page code ... [=[response]] uri;

錯誤頁重定向: 當對於某個請求返回錯誤時, 如果匹配上了

error_page指令中設定的code, 則重定向到新的URI中。

錯誤頁面重定向;

例: error_page 404 /404.html;當用戶請求一個不存在的資源

是, 會自動跳轉到自定義的404.html頁面。

注意跳轉的狀態碼還是原來的狀態碼, 即使是跳轉成功!









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