nginx配置詳解之http模塊

HTTP模塊控制着nginx http處理的所有核心特性 以下爲常用配置:

http{
    include mime.types;
    default_type application/octet-stream;
    client_header_buffer_size 4k;
    large_client_header_buffers 8 128k;
    client_body_buffer_size 512k;
    client_max_body_size 300m;
    gzip  on;
    sendfile on;
    #tcp_nopush on;
}

注: keepalive_timeout open_file_cache也可以配置在http模塊 與配置在event模塊相同  詳見http://blog.csdn.net/zhangsheng_1992/article/details/51689980

     log_format日誌配置 負載均衡  反向代理等配置此處省略介紹 我將在介紹相應的模塊時詳細介紹  故此出省區部分配置



include mime.types;

default_type application/octet-stream;

#設定mime類型,類型由mime.type文件定義 該文件內定義指定文件頭所對應的文件格式 下面爲截取的部分文件內容

types {
    text/html                             html htm shtml;
    text/css                              css;
    text/xml                              xml;
    image/gif                             gif;
    image/jpeg                            jpeg jpg;
    application/javascript                js;
    application/atom+xml                  atom;
    ........

如果你需要新增自定義的文件類型  可以在此文件內定義


client_header_buffer_size 4k;

客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過1k,常見系統分頁大小一般爲4k 你可以通過下列命令查詢:

[xxxx ~]# getconf PAGESIZE
4096

large_client_header_buffers 8 128k;

客戶請求頭緩衝大小 nginx,默認會用client_header_buffer_size設置的buffer值來讀取header值,如果header過大,它會使用large_client_header_buffers設置的值來讀取

對於nginx處理請求,先處理請求的request_line,之後纔是request_header,兩者的buffer分配策略相同,先根據client_header_buffer_size配置的值分配一個buffer,如果分配的buffer

無法容納 request_line/request_header,那麼就會再次根據large_client_header_buffers配置的參數分配large_buffer,如果large_buffer還是無法容納,對於request_line過大

nginx會返回414錯誤 Request URI too large  對於request_header過大,如請求的HTTP頭/Cookie過大 則會出現nginx 400 bad request 的錯誤 注:request請求包的起始爲請求行(Request-Line)

使用場景:

1.如果你的請求中的header都很大,那麼應該使用client_header_buffer_size,這樣能減少一次內存分配。如果你的請求中只有少量請求header很大,那麼應該使用

2.large_client_header_buffers,因爲這樣就僅需在處理大header時纔會分配更多的空間,從而減少無謂的內存空間浪費。


client_body_buffer_size 512k;

同上面的client_header_buffer_size  不過處理的是消息體 body


client_max_body_size 300m;

同上面的large_client_header_buffers  如果你的應用請求body過大 如大文件上傳 如果這裏設置不夠 將會出現 nginx 413 request entity too large

以上四個參數可以配置在main模塊對全局起作用 也可以單獨配置在http模塊內或者server模塊內  由於習慣配置於http模塊內 所以我在此處講解


gzip on;

gzip壓縮功能可以節省帶寬,但是會增加服務器CPU的開銷,Nginx默認只對text/html進行壓縮,如果要對html之外的內容進行壓縮傳輸,需要手動配置

這個配置對整體性能提升有很大幫助 我將在另一篇博文中詳細介紹


sendfile on;

sendfile指令指定 nginx 是否調用sendfile 函數(zero copy 方式)來輸出文件,對於普通應用,必須設爲on。如果用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡IO處理速度,降低系統負載


tcp_nopush on;

此選項允許或禁止使用socket的TCP_CORK的選項,此選項僅在使用sendfile的時候使用,默認爲on


tcp_nodelay on;

這裏tcp_nodelay就是nagle啓用與否的開關,所以上面的指令的效果就是禁用nagle算法,也即不緩存數據,默認爲off 設置爲on 即表示禁用Nagle 算法


proxy_intercept_errors on;
表示使nginx阻止HTTP應答代碼爲400或者更高的應答。


關於nagle算法  sendfile  tcp_nopush  tcp_nodelay 我將在介紹完所有配置項後 詳細介紹 以後會附上傳送門
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章