Nginx學習(一)

###Nginx學習php

  • Mac下啓動nginx: sudo nginx
  • 重啓Nginx:sudo nginx -s reload
  • 查看php進程數:ps aux|grep -c php-fpm
  • nginx模塊分爲:Global,events,http,server,location

#####全局配置node

  • worker_process:指定worker進程的啓動數量,設置該參數爲CPU綁定的負載處理器的核心的數量相同
  • error_log :錯誤寫入文件
  • worker_connections:配置一個工做進程可以接受的併發鏈接最大數

#####使用include文件nginx

  • include文件能夠在任何地方,以便加強配置文件的可讀性

######Http的server部分 用於處理http鏈接正則表達式

客戶端指令:算法

  • client_max_body_size:定義容許最大的客戶端請求頭若是大於這個值,那麼客戶將會是413(Request Entity Too Large)錯誤
  • keepalive_timeout:指定keep-alive鏈接持續多久

Socket:緩存

  • tcp_nodelay:啓用或者禁用TCP_NODELAY選項用於keep-alive鏈接
  • tcp_nopush:僅依賴sendfile使用,它可以使得nginx在一個數據包中嘗試發送響應頭

######虛擬server部分服務器

  • 任何由關鍵字server開始的部分都被稱做虛擬服務器

######Locations網絡

  • location指令能夠用在虛擬服務器server部分,而且提供來自客戶端的URI或者內部重定向訪問。命名location僅對內部訪問重定向
  • location修飾符:~區分大小寫的正則表達式,~*不區分大小寫的正則表達式匹配^~:若是該location是最佳的匹配,那麼對於這個location的字符串再也不進行正則表達式檢測.
  • try_files:用在server部分,try_files指令將會按照給定的參數列出的順序進行嘗試,一個被匹配將會被使用
  • mail的server部分:Nginx可以代理IMAP,POP3,SMTP協議

####反向代理併發

  • Nginx 可以做爲一個反向代理來終結來自於客戶端的請求,而且上游服務器打開一個新的請求.在這個處理的過程當中,爲了更好的相應客戶端的請求,該請求能夠根據它的uri,客戶機參數或者一些其餘的邏輯進行拆分
  • 最重要的部分是proxy_pass指令:指定請求被傳遞到的上游服務器,格式爲URL
  • 可使用配置文件講指令列在一塊兒並保存到一個文件中,而後再包含在配置文件,與proxy_pass指令相同的location中 例:include proxy.conf 而且若是配置指令中存在不一樣於location的值,那麼能夠經過在location部分明確設置覆蓋掉原有的值

#####upstream模塊app

  • 與proxy模塊緊密搭配的是upstream模塊,upstram指令會啓用一個新的配置區段(這些服務器可能被設置了不一樣的權重,權重越高的服務器,會被nginx傳遞越多的鏈接)
  • ip_hash:經過IP地址的哈希值確保客戶端均勻地鏈接全部的服務器
  • keepalive:每個worker進程緩存到上游服務器的鏈接數.在使用http鏈接時proxy_http_version 應設置爲1.1
  • least_conn:激活負載均衡算法,將請求發送到鏈接數最少的那臺服務器

負載均衡算法:

  • upstream模塊可以使用3種負載均衡round-robin,IP哈希(IPhash)和最少鏈接數,默認使用輪詢(round-robin)算法

多個upstream服務器:

upstream app{
	server 127.0.0.1:9001;
	server 127.0.0.1:9003;
	server 127.0.0.1:9004;
}
server{
location /{
	proxy_pass http://app;
}
}

Nginx將會經過輪詢的方式講連續的請求傳遞給3個上游服務器。

tips:

若是一個客戶端但願老是到達同一個服務器,改善會話黏貼性,應該使用ip_hash指令,當發出的請求致使每個請求的響應的時間長短不一,那麼應該選擇least_conn算法

#####孤立應用程序的擴展

  • 擴展應用程序有兩個方向:向上和向外擴展,向上擴展是指添加更多的資源到一臺機器不斷增加的可用資源池。向外擴展意味着向有效的響應池中增長更多的機器
upstream app{
//能夠給服務器設置權重,權重越高會被nginx傳遞更多的鏈接
server 100.00.2.21 weight 10
server 100.00.2.22 weight 2
server 100.00.2.23 weight 3
//設置服務器爲宕機狀態
server 100.00.2.24 down
}
//上游服務器應該被迅速處理,將超時指令設置的低一些
//儘管如此仍然須要當心上游服務器在給定的時間內沒有響應
//Nginx 可能會投遞504網關超時(504Gateway Timeout error)
location / {
proxy_connection_timeout 5;
proxy_read_timeout 10;
proxy_send_timeout 10;
}

#####反向代理的性能調優 緩衝:

  • proxy_buffer_size:設置緩衝大小
  • proxy_buffering :啓用代理緩衝
  • proxy_buffers:用於響應上游服務器的緩衝數量和大小
  • proxy_busy_buffers:在從上游服務器讀取響應時分配給發送響應的緩衝空間大小,典型的設置是將proxy_buffers的兩倍

緩存:

  • proxy_cache :定義用於緩存的共享內存區域

壓縮:

優化帶寬能夠幫助減小響應的傳輸時間,gzip模塊默認啓用,常常被用於壓縮反向代理的內容

  • gzip:對響應啓用或者是禁用壓縮
  • gzipbuffers:指定用於壓縮響應所使用的緩衝和大小
  • gzip_comp_level :指定gzip壓縮的級別

######Nginx Http服務器

  • Nginx包含一個單一的master進程和多個worker進程。全部的這些進程都是單線程,而且設計爲處理同時處理成千上萬個鏈接,worker進程是處理鏈接的地方,由於這個組件就是用於處理客戶端請求的。Nginx使用了操做系統事件機制來快速響應這些請求.
  • Nginx的master進程負責讀取配置文件,處理套接字,派生worker進程,打開日誌文件和編譯嵌入式的perl腳本。master進程是一個能夠經過處理信號量來管理請求的進程
  • Nginx的worker進程處理請求,過濾,處理代理的鏈接和更多的操做都在worker進程,須要配置的worker進程要多於cpu內核數,以便於處理負載

Http是nginx的核心模塊

  • port_in_redirect:肯定nginx是否對端口重定向
  • server:建立一個新的配置區段定義一個虛擬主機,Listen指令指定IP地址和端口號,server_name指令列舉用於匹配的Host的值
  • server_name:配置用於響應請求的虛擬主機名稱

日誌:

配置文件的每個級別均可以有訪問日誌

  • access_log:描述如何寫入日誌
  • log_format:指定出如今日誌文件的字段和採用什麼樣的格式
  • log_not_found:禁止錯誤日誌中報告404錯誤

當指定了gzip後log_format便不可使用

客戶端交互:

Nginx與客戶端交互的方式有不少種,這些方式能夠從鏈接自己(IP地址,超時,存活時間等)

  • error_page:定義一個用於訪問的uri,在遇到設置的錯誤代碼時將會由該URI提供訪問
  • default_type:設置響應的默認類型,若是文件MIME類型不能被types匹配,那麼將會使用該指令指定的類型

使用limit指令防止濫用:

濫用值得是同一個IP每秒到服務器的一個鏈接數,可能採用DDOS拒絕服務的形式

  • limit_conn:指定每一個鍵值對的最大鏈接數
  • limit_rate:限制客戶端下載內容的速率
  • limit_conn_log_level:在Nginx限制鏈接的時候,達到鏈接限制,此時會產生錯誤日誌,該指令用於設置日誌的錯誤級別

約束訪問:

在這裏訪問限制能夠採起兩種形式,對一組特定的IP地址限制,或者對一組特定用戶限制

  • allow:容許這個IP,網絡,或者所有訪問
  • deny:禁止IP,網絡或者all來的訪問

流媒體文件:

  • Nginx提供必定的視頻媒體類型解析flv和mp4模塊
  • flv:支持flv模塊
  • mp4:mp4模塊
  • mp4_buffer_size:設置投遞mp4的初使緩衝的大小
  • mp4_max_buffer_size:設置處理MP4元數據使用的最大緩衝

#####使用Nginx和PHP-FPM

  • php-fpm 使得php內核接受鏈接,php-fpm是將php運行在fastCGI服務器下的一種方法,PHP-FPM的master進程派生worker進程,適應站點使用,在必要的時候從新啓動子進程
  • fastcgi_pass:指定fastCGI服務器如何傳遞請求
  • fastcgi_param:設置傳遞fastCGI服務器的變量和他的值
相關文章
相關標籤/搜索