1. 程式人生 > >使用Nginx負載均衡搭建高效能.NETweb應用程式一

使用Nginx負載均衡搭建高效能.NETweb應用程式一

五、Ngnix如何處理一個請求?
      當Nginx啟動時,先會解析我們配置的檔案,得到監聽的埠和Ip地址,master程序就會初始化這個建庫的socket通訊,然後再fork,master呼叫fork函式建立一個新的程序,由fork建立的新程序被稱為子程序,然後這些worker會競爭去接受的新的連線,此時客戶端就可以向Nginx發起連線了,當客戶端與Nginx進行三次握手,與Nginx建立了一個連線後,此時一個子程序worker會連線成功,然後得到這個建立好的連線socket,然後Nginx對連線的封裝,讀寫處理,最後,Nginx主動關閉連線。
      Nginx在實現時,是通過一個連線池來管理的,每個worker程序都有一個獨立的連線池,連線池的大小是worker_connections。這裡的連線池裡面儲存的其實不是真實的連線,它只是一個worker_connections大小的一個ngx_connection_t結構的陣列。並且,nginx會通過一個連結串列free_connections來儲存所有的空閒ngx_connection_t,每次獲取一個連線時,就從空閒連線連結串列中獲取一個,用完後,再放回空閒連線連結串列裡面。 這個值是表示每個worker程序所能建立連線的最大值,所以,一個nginx能建立的最大連線數,應該是worker_connections * worker_processes。由於反向伺服器要佔用2個連線,
最大併發數量應該是worker_connections * worker_processes/2。