1. 程式人生 > >Nginx教程(一) Nginx入門教程

Nginx教程(一) Nginx入門教程

1 Nginx入門教程

Nginx是一款輕量級的Web伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個BSD-like協議下發行。由俄羅斯的程式設計師IgorSysoev所開發,供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。其特點是佔有記憶體少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好。

Nginx ("engine x") 是一個高效能的 HTTP 和 反向代理 伺服器,也是一個IMAP/POP3/SMTP 代理伺服器。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的Rambler.ru 站點開發的,第一個公開版本 0.1.0 釋出於 2004 年 10 月 4 日。其將原始碼以類 BSD 許可證的形式釋出,因它的穩定性、豐富的功能集、示例配置檔案和低系統資源的消耗而聞名。 

它已經在眾多流量很大的俄羅斯網站上使用了很長時間,這些網站包括 Yandex、Mail.Ru、 VKontakte,以及 Rambler。據 Netcraft 統計,在 2012 年 8 月份,世界上最繁忙的網站中有 11.48%使用 Nginx 作為其伺服器或者代理伺服器。目前網際網路主流公司360、百度、新浪、騰訊、阿里等,目前中國網際網路企業 70%以上公司都在使用 nginx 作為自己的 web 伺服器。Nginx 特點是佔有記憶體少,併發能力強,事實上 nginx 的併發能力確實在同類型的網頁伺服器中表現較好。Nginx 由核心和模組組成,其中,核心的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過配置檔案將客戶端請求對映到一個 location block(location 是 Nginx配置中的一個指令,用於 URL 匹配),而在這個 location 中所配置的每個指令將會啟動不同的模組去完成相應的工作。


Nginx 相對於 Apache 優點:
1) 高併發響應效能非常好,官方 Nginx 處理靜態檔案併發 5w/s
2) 反向代理效能非常強。(可用於負載均衡)
3) 記憶體和 cpu 佔用率低。(為 Apache 的 1/5-1/10)
4) 對後端服務有健康檢查功能。
5) 支援 PHP cgi 方式和 fastcgi 方式。
6) 配置程式碼簡潔且容易上手。 

2. Nginx 工作原理及安裝配置
Nginx 由核心和模組組成,其中,核心的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查詢配置檔案將客戶端請求對映到一個 location block(location 是 Nginx配置中的一個指令,用於 URL 匹配),而在這個 location 中所配置的每個指令將會啟動不同的模組去完成相應的工作。
Nginx 的模組從結構上分為

核心模組、基礎模組和第三方模組: 

核心模組:HTTP 模組、 EVENT 模組和 MAIL 模組
基礎模組: HTTP Access 模組、HTTP FastCGI 模組、HTTP Proxy 模組和 HTTP Rewrite模組,
第三方模組:HTTP Upstream Request Hash 模組、 Notice 模組和 HTTP Access Key模組。


Nginx 的高併發得益於其採用了 epoll 模型,與傳統的伺服器程式架構不同,epoll 是linux 核心 2.6 以後才出現的。 Nginx 採用 epoll 模型,非同步非阻塞,而 Apache 採用的是select 模型 

Select 特點:select 選擇控制代碼的時候,是遍歷所有控制代碼,也就是說控制代碼有事件響應時,
select 需要遍歷所有控制代碼才能獲取到哪些控制代碼有事件通知,因此效率是非常低。


epoll 的特點:epoll 對於控制代碼事件的選擇不是遍歷的,是事件響應的,就是控制代碼上事
件來就馬上選擇出來,不需要遍歷整個控制代碼連結串列,因此效率非常高 

1.1 Nginx下載安裝

1、Nginx下載:nginx-1.13.0.tar.gz,下載到:/usr/local/software/

wget http://nginx.org/download/nginx-1.13.0.tar.gz

2、Nginx解壓安裝:

 tar -zxvf nginx-1.13.0.tar.gz -C ./

 3、Nginx編譯

./configure

報錯

  1. 解決./configure: error: C compiler cc is not found錯誤:

錯誤原因:缺少編譯環境,安裝編譯原始碼所需要的工具和庫:

執行命令:yum install gcc gcc-c++ ncurses-devel perl 

     再次編譯:./configure --prefix=/usr/local/nginx

 

  1. 解決./configure: error: the HTTP rewrite module requires the PCRElibrary.錯誤:

錯誤原因:缺少HTTP rewrite module模組,禁用或者安裝所需要的模組。我們選擇安裝模組:

      執行命令:yum install pcre pcre-devel

 

  1. 解決./configure: error: the HTTP gzip module requires the zliblibrary.錯誤:

  錯誤原因:缺少HTTP zlib類庫,我們選擇安裝模組:

  執行命令:

  yuminstall zlib gzip zlib-devel

4.編譯成功

 5.安裝Nginx:

安裝命令:make & make install

 

1.2 Nginx啟動

1、檢視安裝目錄:cd

conf 存放配置檔案

html 網頁檔案

logs 存放日誌

sbin   shell啟動、停止等指令碼

 

 2、啟動nginx

 

檢視程序

 

常見問題:

 

解決nginx:[emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)錯誤:

錯誤原因:不能繫結80埠,80埠已經被佔用。

3、停止nginx,重新載入配置檔案

執行命令:kill –INT程序號

啟動成功:

 

 重新讀取配置檔案:

nginx-s reload

4、Nginx訊號控制

TERM, INT

快速停止(殺死程序)

QUIT

優雅的關閉程序,即等請求結束後再關閉

HUP

改變配置檔案,平滑的重讀配置檔案

USR1

重讀日誌,在日誌按月/日分割時有用

USR2

平滑的升級

WINCH

優雅關閉舊的程序(配合USR2進行升級)

5.開啟瀏覽器

1.3常用命令

 進去nginx的安裝目錄

進去sbin

常用命令

複製程式碼
啟動
./nginx 

檢查 nginx.conf配置檔案
./nginx -t

重啟
./nginx -s reload

停止

./nginx -s stop
複製程式碼

1.4 學習Nginx推薦書籍:

1. 《深入剖析Nginx》

2. 《實戰Nginx:取代Apache的高效能Web伺服器》

3. 《深入理解Nginx:模組開發與架構解析》

4. 《深入理解Nginx:模組開發與架構解析》

5. 《決戰Nginx技術卷:高效能Web伺服器部署與運維》

6. 《決戰Nginx系統卷:高效能Web伺服器詳解與運維》