nginx啟動過程分析

來源:互聯網
上載者:User

標籤:nginx   高效能伺服器   socket   nginx啟動   

      nginx的啟動過程緊緊圍繞著ngx_cycle_t的結構體展開,首先通過ngx_get_options()擷取命令列參數,然後通過ngx_time_init()進行時間的初始化,如全域變數ngx_cached_time;再通過ngx_regx_init()完成正則的初始化,通過ngx_log_init()建立日誌對象,初始化日誌,如初始化全域變數ngx_prefix,開啟記錄檔ngx_log_file.fd;通過ngx_create_pool()建立記憶體池,大小為1024B;ngx_save_argv()儲存命令列參數至全域變數ngx_os_argv、ngx_argc、ngx_argv;通過ngx_process_options()處理init_cycle中的設定檔路徑,初始化ngx_cycle的prefix, conf_prefix, conf_file, conf_param等欄位;ngx_os_init()完成作業系統的一些資訊的擷取,如記憶體頁面大小、系統限制資源等資訊,將其儲存在對應的全域變數中,通過ngx_crc32_table_init()初始化一個迴圈冗餘校正表,為後面高效尋找迴圈冗餘做準備;通過ngx_add_inherited_sockets:通過環境變數

  • 解析環境變數NGINX_VAR="NGINX"中的sockets,並儲存至ngx_cycle.listening數組;
  • 設定ngx_inherited=1;
  • 調用ngx_set_inherited_sockets()逐一對ngx_cycle.listening數組中的sockets進行設定;

然後對模組數組中的各模組進行編號,繼而調用ngx_init_cycle()完成對ngx_cycle_t類型變數cycle的初始化,在ngx_init_t中做的事情如:

     之後,根據條件調用 ngx_signal_process()對進程訊號處理,通過ngx_os_status()擷取作業系統的狀態資訊,讀取設定檔的資訊,

  • 若有訊號,則進入ngx_signal_process()處理;
  • 調用ngx_init_signals()初始化訊號;主要完成訊號處理常式的註冊;
  • 若無繼承sockets,且設定了守護進程標識,則調用ngx_daemon()建立守護進程;
  • 調用ngx_create_pidfile()建立進程記錄檔案;(非NGX_PROCESS_MASTER=1進程,不建立該檔案)
  • 進入進程主迴圈;
    • 若為NGX_PROCESS_SINGLE=1模式,則調用ngx_single_process_cycle()進入進程迴圈;
    • 否則為master-worker模式,調用ngx_master_process_cycle()進入進程迴圈;
    • 具體可參考<nginx源碼分析—master/worker進程啟動>;

參考:http://blog.csdn.net/livelylittlefish/article/details/7243718


nginx啟動過程分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.