###Nginx學(xué)習(xí)
Mac下啟動nginx: sudo nginx 重啟Nginx:sudo nginx -s reload 查看php進(jìn)程數(shù):ps aux|grep -c php-fpm nginx模塊分為:Global,events,http,server,location
#####全局配置
worker_process:指定worker進(jìn)程的啟動數(shù)量,設(shè)置該參數(shù)為CPU綁定的負(fù)載處理器的核心的數(shù)量相同 error_log :錯誤寫入文件 worker_connections:配置一個工作進(jìn)程能夠接受的并發(fā)連接數(shù)#####使用include文件
include文件可以在任何地方,以便增強(qiáng)配置文件的可讀性######Http的server部分 用于處理http連接
客戶端指令:
client_max_body_size:定義允許的客戶端請求頭如果大于這個值,那么客戶將會是413(Request Entity Too Large)錯誤 keepalive_timeout:指定keep-alive連接持續(xù)多久Socket:
tcp_nodelay:啟用或者禁用TCP_NODELAY選項用于keep-alive連接 tcp_nopush:僅依賴sendfile使用,它能夠使得nginx在一個數(shù)據(jù)包中嘗試發(fā)送響應(yīng)頭######虛擬server部分
任何由關(guān)鍵字server開始的部分都被稱作虛擬服務(wù)器######Locations
location指令可以用在虛擬服務(wù)器server部分,并且提供來自客戶端的URI或者內(nèi)部重定向訪問。命名location僅對內(nèi)部訪問重定向 location修飾符:~區(qū)分大小寫的正則表達(dá)式,~*不區(qū)分大小寫的正則表達(dá)式匹配^~:如果該location是的匹配,那么對于這個location的字符串不再進(jìn)行正則表達(dá)式檢測. try_files:用在server部分,try_files指令將會按照給定的參數(shù)列出的順序進(jìn)行嘗試,一個被匹配將會被使用 mail的server部分:Nginx能夠代理IMAP,POP3,SMTP協(xié)議####反向代理
Nginx 能夠作為一個反向代理來終結(jié)來自于客戶端的請求,并且上游服務(wù)器打開一個新的請求.在這個處理的過程中,為了更好的相應(yīng)客戶端的請求,該請求可以根據(jù)它的uri,客戶機(jī)參數(shù)或者一些其他的邏輯進(jìn)行拆分 最重要的部分是proxy_pass指令:指定請求被傳遞到的上游服務(wù)器,格式為URL 可以使用配置文件講指令列在一起并保存到一個文件中,然后再包含在配置文件,與proxy_pass指令相同的location中 例:include proxy.conf 并且如果配置指令中存在不同于location的值,那么可以通過在location部分明確設(shè)置覆蓋掉原有的值#####upstream模塊
與proxy模塊緊密搭配的是upstream模塊,upstram指令會啟用一個新的配置區(qū)段(這些服務(wù)器可能被設(shè)置了不同的權(quán)重,權(quán)重越高的服務(wù)器,會被nginx傳遞越多的連接) ip_hash:通過IP地址的哈希值確保客戶端均勻地連接所有的服務(wù)器 keepalive:每一個worker進(jìn)程緩存到上游服務(wù)器的連接數(shù).在使用http連接時proxy_http_version 應(yīng)設(shè)置為1.1 least_conn:激活負(fù)載均衡算法,將請求發(fā)送到連接數(shù)最少的那臺服務(wù)器負(fù)載均衡算法:
upstream模塊能夠使用3種負(fù)載均衡round-robin,IP哈希(IPhash)和最少連接數(shù),默認(rèn)使用輪詢(round-robin)算法多個upstream服務(wù)器:
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將會通過輪詢的方式講連續(xù)的請求傳遞給3個上游服務(wù)器。
tips:
如果一個客戶端希望總是到達(dá)同一個服務(wù)器,改善會話黏貼性,應(yīng)該使用ip_hash指令,當(dāng)發(fā)出的請求導(dǎo)致每一個請求的響應(yīng)的時間長短不一,那么應(yīng)該選擇least_conn算法
#####孤立應(yīng)用程序的擴(kuò)展
擴(kuò)展應(yīng)用程序有兩個方向:向上和向外擴(kuò)展,向上擴(kuò)展是指添加更多的資源到一臺機(jī)器不斷增長的可用資源池。向外擴(kuò)展意味著向有效的響應(yīng)池中增加更多的機(jī)器upstream app{ //可以給服務(wù)器設(shè)置權(quán)重,權(quán)重越高會被nginx傳遞更多的連接 server 100.00.2.21 weight 10 server 100.00.2.22 weight 2 server 100.00.2.23 weight 3 //設(shè)置服務(wù)器為宕機(jī)狀態(tài) server 100.00.2.24 down } //上游服務(wù)器應(yīng)該被迅速處理,將超時指令設(shè)置的低一些 //盡管如此仍然需要小心上游服務(wù)器在給定的時間內(nèi)沒有響應(yīng) //Nginx 可能會投遞504網(wǎng)關(guān)超時(504Gateway Timeout error) location / { proxy_connection_timeout 5; proxy_read_timeout 10; proxy_send_timeout 10; }
#####反向代理的性能調(diào)優(yōu) 緩沖:
proxy_buffer_size:設(shè)置緩沖大小 proxy_buffering :啟用代理緩沖 proxy_buffers:用于響應(yīng)上游服務(wù)器的緩沖數(shù)量和大小 proxy_busy_buffers:在從上游服務(wù)器讀取響應(yīng)時分配給發(fā)送響應(yīng)的緩沖空間大小,典型的設(shè)置是將proxy_buffers的兩倍緩存:
proxy_cache :定義用于緩存的共享內(nèi)存區(qū)域壓縮:
優(yōu)化帶寬可以幫助減少響應(yīng)的傳輸時間,gzip模塊默認(rèn)啟用,經(jīng)常被用于壓縮反向代理的內(nèi)容
gzip:對響應(yīng)啟用或者是禁用壓縮 gzipbuffers:指定用于壓縮響應(yīng)所使用的緩沖和大小 gzip_comp_level :指定gzip壓縮的級別######Nginx Http服務(wù)器
Nginx包含一個單一的master進(jìn)程和多個worker進(jìn)程。所有的這些進(jìn)程都是單線程,并且設(shè)計為處理同時處理成千上萬個連接,worker進(jìn)程是處理連接的地方,因為這個組件就是用于處理客戶端請求的。Nginx使用了操作系統(tǒng)事件機(jī)制來快速響應(yīng)這些請求. Nginx的master進(jìn)程負(fù)責(zé)讀取配置文件,處理套接字,派生worker進(jìn)程,打開日志文件和編譯嵌入式的perl腳本。master進(jìn)程是一個可以通過處理信號量來管理請求的進(jìn)程 Nginx的worker進(jìn)程處理請求,過濾,處理代理的連接和更多的操作都在worker進(jìn)程,需要配置的worker進(jìn)程要多于cpu內(nèi)核數(shù),以便于處理負(fù)載Http是nginx的核心模塊
port_in_redirect:確定nginx是否對端口重定向 server:創(chuàng)建一個新的配置區(qū)段定義一個虛擬主機(jī),Listen指令指定IP地址和端口號,server_name指令列舉用于匹配的Host的值 server_name:配置用于響應(yīng)請求的虛擬主機(jī)名稱日志:
配置文件的每一個級別都可以有訪問日志
access_log:描述如何寫入日志 log_format:指定出現(xiàn)在日志文件的字段和采用什么樣的格式 log_not_found:禁止錯誤日志中報告404錯誤當(dāng)指定了gzip后log_format便不可以使用
客戶端交互:
Nginx與客戶端交互的方式有很多種,這些方式可以從連接本身(IP地址,超時,存活時間等)
error_page:定義一個用于訪問的uri,在遇到設(shè)置的錯誤代碼時將會由該URI提供訪問 default_type:設(shè)置響應(yīng)的默認(rèn)類型,如果文件MIME類型不能被types匹配,那么將會使用該指令指定的類型使用limit指令防止濫用:
濫用值得是同一個IP每秒到服務(wù)器的一個連接數(shù),可能采用DDOS拒絕服務(wù)的形式
limit_conn:指定每個鍵值對的連接數(shù) limit_rate:限制客戶端下載內(nèi)容的速率 limit_conn_log_level:在Nginx限制連接的時候,達(dá)到連接限制,此時會產(chǎn)生錯誤日志,該指令用于設(shè)置日志的錯誤級別約束訪問:
在這里訪問限制可以采取兩種形式,對一組特定的IP地址限制,或者對一組特定用戶限制
allow:允許這個IP,網(wǎng)絡(luò),或者全部訪問 deny:禁止IP,網(wǎng)絡(luò)或者all來的訪問流媒體文件:
Nginx提供一定的視頻媒體類型解析flv和mp4模塊 flv:支持flv模塊 mp4:mp4模塊 mp4_buffer_size:設(shè)置投遞mp4的初使緩沖的大小 mp4_max_buffer_size:設(shè)置處理MP4元數(shù)據(jù)使用的緩沖#####使用Nginx和PHP-FPM
php-fpm 使得php內(nèi)核接受連接,php-fpm是將php運行在fastCGI服務(wù)器下的一種方法,PHP-FPM的master進(jìn)程派生worker進(jìn)程,適應(yīng)站點使用,在必要的時候重新啟動子進(jìn)程 fastcgi_pass:指定fastCGI服務(wù)器如何傳遞請求 fastcgi_param:設(shè)置傳遞fastCGI服務(wù)器的變量和他的值