Nginx 詳解HTTP模塊

指令的合併

指令在多個塊同時存在時可以合併,但不是所有的指令都可以合併。

值指令:存儲配置項的值

  • 可以合併
  • 示例
    • root
    • access_log
    • gzip

動作類指令:指令行爲

  • 不可以合併
  • 示例
    • rewrite
    • proxy_pass
  • 生效階段
    • server_rewrite 階段
    • rewrite 階段
    • content 階段

存儲值的指令繼承規則:向上覆蓋

  • 子配置不存在時,直接使用父配置塊
  • 子配置存在時,直接覆蓋父配置塊

HTTP模塊合併配置的實現

  • 指令在哪個塊下生效?
  • 指令允許出現在哪些塊下?
  • 在server塊內生效,從http向server合併指令:
  • 配置緩存在內存

Listen指令

示例:
listen unix:/var/run/nginx.sock;
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000 bind;
listen [::]:8000 ipv6only=on;
listen [::1];

處理HTTP請求頭部的流程

接收請求事件模塊

  • 操作系統內核
  • 事件模塊
  • HTTP模塊

接收請求HTTP模塊

  • 接收URI
    • 分配請求內存池 request_pool_size:4k
    • 狀態機解析請求行
    • 分配大內存 large_client_header_buffers:4 8k
    • 狀態機解析請求行
    • 標識URI
  • 接收header
    • 狀態機解析header
    • 分配大內存 large_client_header_buffers:4 8k
    • 標識header
    • 移除超時定時器 client_header_timeout: 60s
    • 開始11個階段的http請求處理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章