###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服務器的變量和他的值