Linux–Nginx攻略

什麼是Nginx

Nginx (「engine x」) 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。Nginx是由Igor Sysoev爲俄羅斯訪問量第二的Rambler.ru站點開發的,第一個公開版本0.1.0發佈於2004年10月4日。其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發佈。php

Nginx是一款輕量級的WEB服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler(俄文:Рамблер)使用。其特色是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。html

 

Nginx HTTP服務器的特點及優勢

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

Nginx的主要企業功能

  • 使用Nginx運行HTML,JS,CSS,小圖片等靜態數據(此功能相似Lighttpd軟件)
  • Nginx結合FastCGI運行php等動態程序(例如使用fastcgi_pass方式)
  • Nginx結合Tomcat/Resin等支持Java動態程序(經常使用的proxy_pass)

Nginx做爲web服務器的主要應用場景包括:

  1. 使用Nginx運行HTML,JS,CSS,小圖片等靜態數據(此功能相似Lighttpd軟件)
  2. Nginx結合FastCGI運行php等動態程序(例如使用fastcgi_pass方式)
  3. Nginx結合Tomcat/Resin等支持Java動態程序(經常使用的proxy_pass)

通常狀況下普通php引擎支持的併發鏈接參考爲300-1000,Java引擎和數據庫的併發鏈接參考值爲300-1500.固然架構不一樣可能會有浮動前端

Nginx的安裝

快速安裝命令集合:

各個命令解釋linux

  • 安裝前須要安裝pcre庫(兼容正則表達式)
  • 還須要安裝openssl
  • 編譯以前還須要建立一個用戶
  • 編譯安裝:
  • 安裝完成後的檢查與啓動,重啓

 

  • 注意:一、關閉防火牆:

    二、關閉安全子系統(selinux)

    a、查看selinux的狀態:nginx

    能夠經過/usr/sbin/sestatus –v 或者用命令 getenforceweb

    Disabled爲關閉正則表達式

    b、更改selinux的方式:數據庫

    setenforce 0(臨時關閉)ubuntu

    vi編輯/etc/selinux/config進行下面更改後端

    SELINUX=disabled(永久關閉)

 

安裝故障總結

安裝故障處理:

故障一:沒有安裝pcrepcre-devel

報錯爲:./configure: error: the HTTP rewrite module requires the PCRE library.

故障二:沒有安裝opensslopenssl-devel

報錯爲:./configure: error: SSL modules require the OpenSSL library.

故障三:nginx.pid文件缺失

執行:/application/nginx1.6.2/sbin/nginx -c /application/nginx1.6.2/conf/nginx.conf

從新指定下配置文件的位置

報錯爲:nginx: [error] open() "/application/nginx1.6.2/logs/nginx.pid" failed (2: No such file or directory)

若是yum報錯請:

http://user.qzone.qq.com/616745045/2  按照上述文檔進行配置

經常使用的Nginx http功能模塊

 

nginx.conf詳解

egrep -v "#|^$" nginx.conf.default >nginx.conf

Location 模塊

location 模塊的做用是根據用戶請求的URI來執行不一樣的應用,匹配成功了進行相關的操做

什麼是統一資源標示符URI(Uniform Resource Identifier):

是一個用於標識某一互聯網資源名稱的字符串,該種標識容許用戶對任何的資源經過特定的協議進行交互操做。URI由包括肯定語法和相關協議的方案所定義。Web上可用的每種資源 HTML文檔、圖像、視頻片斷、程序等 - 由一個統一資源標識符進行定位。

Location基礎語法

6種location格式的區別

一、^~ 特殊字符串匹配 匹配到相應的字符串後,不會對後面正則進行匹配

二、~* 正則匹配 不區分大小寫

三、‘=‘ 精確查找

四、/xxx/ 普通字符串路徑匹配

五、/ 根 當全部匹配結束 沒有符合的 匹配默認的 / 根路徑

六、~ 表示uri包含正則,而且區分大小寫

實驗1、輸入www.imdsx.cn

nginx代理走的是精確匹配全部走到了400(這裏多提一句,當屢次使用的路徑時 可使用精確匹配方式,加快匹配速度提升性能)

實驗2、輸入http://www.imdsx.cn/123456

nginx全部location都沒有匹配到找到了默認的根  也就是401

實驗3、輸入http://www.imdsx.cn/1.gif

nginx匹配的事正則 *.gif 也就走到了 403

組合實驗

實驗4、輸入www.imdsx.com/aaa/1.gif

同時存在普通路徑、和正則的狀況下nginx又是如何匹配的呢?

nginx匹配的是正則,由於nginx在匹配時會先記錄最高匹配度的普通uri,再去匹配正則,若是正則有匹配的則展現正則,不然展現普通uri

實驗5、輸入www.imdsx.cn/aaa/1.abc 

咱們輸入了一個不符合正則的URI nginx匹配到了普通URI 502錯誤

實驗5、輸入www.imdsx.com/bbb/1.gif

nginx這時匹配的是402錯誤,^~ 方式若是匹配到普通uri後就不在繼續正則匹配

從新改下location

 

實驗6、「^~」遵循最大匹配原則 

 輸入www.imdsx.cn/aaa/

nginx匹配了 400

輸入www.imdsx.cn/aaa/bbb/

nginx匹配了 401

從新改下location

 

試驗7、當最長匹配(^~)和精確匹配(=)相同時

這時輸入http://www.imdsx.cn/aaa/

nginx 匹配到了 401 匹配到了精確匹配(=)

Nginx對於靜態文件的緩存配置

只要訪問的是圖片文件,就會根據圖片的名稱在image的這個目錄中尋找

爲何配置靜態緩存?

一、爲了提升響應速度

二、減輕真實服務器的負載

對於靜態資源(長久使用不變更的文件或圖片)咱們能夠在反向代理服務器中進行緩存,nginx在跳轉時只要匹配到了緩存中的文件,講直接經過nginx返回給客戶端,若是沒有則在下發到個服務器進行處理。大大優化了客戶的訪問速度和對真是服務器所形成的真實壓力

upstream模塊

Upstream的牛逼之處在於,它解決了nginx跨越單機的限制,完成網絡數據的接收、處理和轉發。實現了負載均衡的能力。數據轉發功能,爲nginx提供了跨越單機的橫向處理能力,使nginx擺脫只能爲終端節點提供單一功能的限制,而使它具有了網路應用級別的拆分、封裝和整合的戰略功能。在雲模型大行其道的今天,數據轉發使nginx有能力構建一個網絡應用的關鍵組件。

Upstream的四種命中機制

一、ip_hash;

iphash 可以避免同一個客戶端連續的web請求分發到多個機器 涉及到session校驗問題 經過iphash解決該問題

二、least_conn;

請求分發到最少鏈接數的服務器上

三、Round Robin(輪訓)

默認是輪訓機制,當有服務器down掉,就從負載列表清除掉

輪詢時默認的weight=1;

四、Weight(權重)(weighted round robin)

基於權重的反向代理 weight值越大越有概率被分配

在實際應用中iphash和weight能夠搭配使用

反向代理的配置設置

代理緩存區設置(proxy_buffering)

proxy_buffering參數

代理緩存的開啓和關閉,不影響proxy_buffer_size的做用,只做用在proxy_buffers、proxy_busy_buffers_size

接受服務器返回的第一個部分 response header 建議設置爲proxy_buffers的一個buffer的大小

設置buffer的數量和大小

nginx在接受服務器的數據的同時,並非所有接受服務器回傳的數據在返回客戶端而是有部分數據在接收的同時返回客戶端,返回的大小經過proxy_busy_buffers_size 設置,建議是單個buffer的兩倍。若是緩衝區和busy緩衝區都滿了則寫到磁盤的臨時文件中。經過下方的參數設置

responser返回佔滿了全部buffer則存在temp_file下 而最多能接收的大小則經過proxy_max_temp_file_size設置 當涉及到磁盤存儲時就涉及到IO的操做,則會影響到客戶端體驗的效果

是一次訪問能寫入的臨時文件的大小,默認的大小單個buffer的2倍

生產中常見的網站狀態碼

1
2
3
4
5
6
7
8
9
10
11
12
13
狀態碼 詳細描述說明
200-OK                      服務器成功返回網頁,這是成功的狀態碼
301-Moved Permanently       永久跳轉,所請求的網頁將永久跳轉到被設定的新位置
403-Forbidden               禁止訪問,雖然這個請求時合法的,可是服務器端由於匹配了預先設置的規則而拒絕相應客戶端的請求,
                            此類問題通常爲服務器或服務器權限配置不當所致
404-Not Found               服務器找不到客戶端請求的指定頁面,多是客戶端請求了服務器上不存在的資源所致使
500-Internal Server Error   內部服務器錯誤,服務器遇到了意料不到的狀況,不能完成客戶的請求,
                            這是一個較爲籠統的報錯,通常爲服務器的設置或內部程序問題致使
502-Bad Gateway             壞的網關,通常是代理服務器請求後端服務時,後端服務不可用或沒有完成相應網關服務器,
                            這一般爲反向代理服務器下面的節點出問題致使
503-Service Unavailable     服務當前不可用,多是服務器超載或停機維護致使的,或者是反向代理沒有能夠提供的服務節點
504-Gateway Timeout         網關超時,通常是網關代理服務器請求後端服務時,後端服務沒有在特定的時間內完成處理請求,
                            多數是服務器過載致使沒有在指定的時間內返回數據給前端代理服務器
相關文章
相關標籤/搜索