nginx和php有什麼關係?不少新手可能有這個疑問,我以前學php也沒注意這些問題,只管着按文檔配置操做,完成php項目就無論了,最近特地總結了一下。php
php是一門編程語言,講究說學逗唱...呃,不對,是能夠編寫不少程序,可是隻有php的話,你的php只能在你的服務器裏孤立的運行,好比你用php寫了一個能夠經過身高計算人的標準體重的程序,雖然這個程序能夠在服務器運行,可是他還不能和客戶交互,由於客戶如今還不能訪問你的php程序,他也不會去下載你的php程序到本身電腦裏運行,他只想默默的經過瀏覽器告訴你他的身高,而後獲得這個程序返回的體重,那麼誰來獲得這個用戶發送過來的請求呢,又怎麼把請求數據轉發給對應的php程序呢 ?python
nginx就是爲了解決上述問題而出現的,nginx是一個已經寫好的程序,須要安裝配置,做用是專門接收處理客戶經過瀏覽器等發送來的請求,並和你寫的php程序交互,就這麼簡單,可是nginx不只能夠和你寫的php程序交互,也能夠和你寫的其餘程序交互,好比C,python,由於不是全部人都用php來寫web程序,簡單點說nginx是一個能夠監聽處理http請求(瀏覽器請求)的程序,會裝會配置,知道流程就能夠用了,固然深刻了解下就更好了。nginx
這樣的話,nginx就能夠比喻處理成處理http請求業務的部門,是服務器和外部千千萬萬瀏覽器等客戶端進行溝通的關口。php是服務器內部一個數據加工部門,能夠加工生成各類頁面。客戶端發送的http請求歷經層層路由到達你的服務器,而後被nginx逮個正着,統一聽候nginx大人的調度,若是客戶請求的是其餘靜態資源,好比txt文本,圖片等,nginx直接找到該資源,並返回給客戶端,若是客戶請求的是php程序,就找到對應的php程序,而後把客戶數據給這個程序,讓這個php程序運行一遍,再把這個程序運行的結果返回給客戶端。web
固然nginx和php具體交互並無那麼簡單,還須要保證規範和高效,在數據交換上,需遵照統一的規範,這個好理解,你們統一數據格式纔不會亂套,效率纔會更高。編程
爲了更深刻的理解nginx,你也能夠本身寫一個web服務,好比用c或python寫一個程序監聽你服務器的80端口,80端口就是http請求的入口,而後還要考慮多線程等處理,由於客戶的請求有時候會一塊兒過來,也就是併發,不能寫個服務只能處理一個請求,獲得客戶的請求後還要獲得須要的參數進行分析,若是對方請求的是php程序,要考慮在系統裏實時啓動對應的php程序,把數據交給那個程序,而後老老實實的等這個程序運行結束,獲得該程序產生的結果,而後把這個結果送還給客戶端,這樣就完成任務了。本身去想辦法實現還能補充很多知識,好比socket編程,c,進程之間是怎麼進行交互的等等,寫完後還會去關注處理請求能力,內存使用狀況,這樣下來就會有一個比較完整的認識,最後反過來就會去想nginx是怎樣處理高併發的呢?爲何我寫的遇到併發常常掛掉?我寫的和php交互時爲何這麼慢?nginx裏配置的php-fpm又是什麼?有了這些疑問後,再進行下一步深刻探索,效率就會高不少了。瀏覽器