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請求處理