《WEB服務器——Nginx》Nginx配置詳解

  • nginx如何處理高併發?

  nginx採用了異步非阻塞的方式來處理請求,也就是說,nginx是可以同時處理成千上萬個請求的。
  • ngin如何配置多個進程?

nginx在啓動的時候,會啓動一個master進程和多個worker進程。master進程主要用來管理worker進程,包含:接收來自外界的信號,向各worker進程發送信號,監控worker進程的運行狀態。一個請求,只可能在一個worker進程中處理,一個worker進程,不可能處理其它進程的請求。而worker進程的個數是可以設置的,一般我們會設置與機器cpu核數一致。這樣可以最大限度使用機器的資源。可以用下列命令查看服務器核數

[root@tomatocc ~]# cat /proc/cpuinfo| grep "cpu cores"| uniq
cpu cores       : 2

然後在nginx.conf配置之文件中增加配置

worker_processes 2;
  • nginx如何配置每個進程的最大連接數?

nginx在實現時,是通過一個連接池來管理的,每個worker進程都有一個獨立的連接池,連接池的大小是t通過worker_connections 參數進行控制。(一個nginx能建立的最大連接數,應該是worker_connections * worker_processes。當然,這裏說的是最大連接數,對於HTTP請求本地資源來說,能夠支持的最大併發數量是worker_connections * worker_processes,而如果是HTTP作爲反向代理來說,最大併發數量應該是worker_connections * worker_processes/2。因爲作爲反向代理服務器,每個併發會建立與客戶端的連接和與後端服務的連接,會佔用兩個連接。)。該參數不能超過最大文件打開數。我們可以在linux終端中輸入ulimit -a命令進行查看,或者用ulimit -n也可以直接查看
在這裏插入圖片描述

events {
	 #每個進程允許最大連接數
    worker_connections 1024
}
  • ngin如何配置請求頭buff的大小?

我們需要知道,nginx會將整個請求頭都放在一個buffer裏面,這個buffer的大小通過配置項client_header_buffer_size來設置,如果用戶的請求頭太大,這個buffer裝不下,那nginx就會重新分配一個新的更大的buffer來裝請求頭,這個大buffer可以通過large_client_header_buffers來設置,這個large_buffer這一組buffer,比如配置4 8k,就是表示有四個8k大小的buffer可以用。(nginx的client_header_buffer_size默認值爲1kb,因此如果請求頭大小超過1kb,就需要優化)

這裏,建議直接使用large_client_header_buffers參數進行優化即可,即配置爲:large_client_header_buffers 4 4k;這裏的4k參數值,可以參考服務器的分頁大小進行設置。可以用getconf PAGESIZE命令來獲取。(單位:kb)

[root@tomatocc ~]# getconf PAGESIZE
4096

然後在nginx.conf配置之文件中增加配置(爲什麼第一個值爲4,暫時找不到權威的說法,後續瞭解後會補充)

    server {
        listen       8088;
        server_name  127.0.0.1;

		large_client_header_buffers 4 4k;

附上nginx源碼在這裏插入圖片描述

  • 如何配置keepalive的值?

首先,我們應該在知道什麼是長連接呢?我們知道,http請求是基於TCP協議之上的,那麼,當客戶端在發起請求前,需要先與服務端建立TCP連接,而每一次的TCP連接是需要三次握手來確定的,如果客戶端與服務端之間網絡差一點,這三次交互消費的時間會比較多,而且三次交互也會帶來網絡流量。在使用長連接的情況下,當一個網頁打開完成後,客戶端和服務器之間用於傳輸HTTP數據的TCP連接不會關閉,客戶端再次訪問這個服務器時,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。實現長連接需要客戶端和服務端都支持長連接。

瞭解了這些後,我們就可以通過配置keepalive_timeout的來設置超時時間,如果配置爲0,則表示關掉keepalive,此時,http版本無論是1.1還是1.0,客戶端的connection不管是close還是keepalive,都會強制爲close。

然後在nginx.conf配置之文件中增加配置

http {
    #服務端等待客戶端請求的中最大超時時間(默認75s)
    keepalive_timeout  65;

歡迎關注本人個人公衆號,交流更多技術信息

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章