首頁 >後端開發 >php教程 >nginx學習整理 nginx apache nginx php nginx rewrite

nginx學習整理 nginx apache nginx php nginx rewrite

WBOY
WBOY原創
2016-07-29 08:49:281132瀏覽

nginx
 nginx是一個高效能HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器。
 能夠支援高達5w以上並發連線數的回應,nginx選擇了epoll/kqueue作為網路IO模型。
 nginx也可以作為負載平衡伺服器,nginx使用c語言編寫。
 nginx是一個主進程和多個工作進程,工作進程是單執行緒的。每個工作進程可以採用非同步非阻塞的方式處理客戶端請求。
 【擴展學習 非同步非阻塞  以及epoll select poll kqueue】
 nginx中php是以fastcgi的方法結合nginx。
 客戶端發送請求給nginx伺服器,nginx伺服器透過fastcgi將這個請求交給php處理,php處理的結果透過fastcgi回傳給nginx伺服器

 之後nginx伺服器再將結果傳回給客戶端。

 fastcgi的知識
    cgi是一種通用網關介面 是外部應用程式和網頁伺服器之間的介面標準,外部應用程式和網頁伺服器之間傳遞資訊的規程。
    cgi規格允許網頁伺服器執行外部程序,並將它們輸出傳送給web瀏覽器。
fastcgi是對cgi的一種改良。
    fastcgi像是常駐記憶型的cgi,當請求到達時cgi會先fork出一個進程來進行處理這個請求
    但是fastcgi在啟動載入時,就啟動多個cgi解釋器,並等待web伺服器的連接。
    當客戶端要求到達webserver的時候,fastcgi進程管理器會選擇一個cgi解釋器來處理這個請求。
    好處是cgi解釋器被載入記憶體不需要每次需要的時候從記憶體中讀取,極大提高了網站的效能
fastcgi的問題是修改php設定的時候不能立刻生效。需要reload一下。
阻塞 
    客戶端的一個請求過來,web伺服器接收這個請求,這個請求需要進行io操作,
    io操作需要耗費10秒,那麼web伺服器就等待10秒,在這10秒的時間裡,web伺服器拒絕其他的客戶端請求。
非阻塞 
    一個客戶端的請求過來,web伺服器接收這個請求,這個請求需要進行io操作,並且io需要耗時10秒
    web伺服器在io操作的這10秒裡,還是可以接收其他客戶端請求, web伺服器將這些請求的檔案描述子放到一個佇列裡,當io作業準備好
    就將資料傳送給這個客戶端。
異步非阻塞io模型
    一個master線程和多個worker線程,一個worker線程可以處理多個請求,如果請求的事件沒有處理好,那麼就將這個事件文件描述符放到一個隊列中
    當事件處理好之後,再去讀請求返回的結果,所以可以處理大量的並發請求,當然這裡的並發只是沒有處理完的請求,由於worker是一個線程
    所以,能同時處理的請求只要一個。
    只是在請求間進行不斷地切換而已,切換也是因為非同步事件未準備好,而主動讓出的。
    這裡的切換是沒有任何代價,你可以理解為循環處理多個準備好的事件,事實上就是這樣的。
    與多線程相比,這種事件處理方式是有很大的優勢的,不需要創建線程,每個請求佔用的內存也很少,沒有上下文切換,
    事件處理非常的輕量級。並發數再多也不會導致無謂的資源浪費(上下文切換)

以上就介紹了nginx學習整理,包含了nginx的內容,希望對PHP教學有興趣的朋友有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn