Nginx 配置優(yōu)化篇

Nginx 壓縮傳輸

開啟Gzip
gzip on;      

不壓縮臨界值脊串,大于1K的才壓縮西设,一般不用改
gzip_min_length 1k;   

設(shè)置系統(tǒng)獲取幾個單位的緩存用于存儲gzip的壓縮結(jié)果數(shù)據(jù)流淘衙。4 16k 代表以 16k 為單位护盈,按照原始數(shù)據(jù)大小以 16k 為單位的4倍申請內(nèi)存毫玖。
gzip_buffers 4 16k;

gzip_http_version 1.1;

范圍為1~9侠碧。1 壓縮比最小處理速度最快斟或,9 壓縮比最大但處理最慢绍移。壓縮越快越消耗cpu艳悔。
gzip_comp_level 2;

匹配MIME類型進(jìn)行壓縮急凰,默認(rèn)"text/html" 類型是會被壓縮的。 此外猜年,Nginx下的gzip默認(rèn)不壓縮javascript抡锈、圖片等靜態(tài)資源文件,可以通過gzip_types指定需要壓縮的MIME類型,非設(shè)置值則不進(jìn)行壓縮 
text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

和http頭有關(guān)系乔外,加個vary頭床三,給代理服務(wù)器用的,有的瀏覽器支持壓縮杨幼,有的不支持撇簿。因此聂渊,為避免浪費(fèi)不支持的也壓縮,需要根據(jù)客戶端的HTTP頭來判斷四瘫,是否需要壓縮汉嗽。
gzip_vary on; 

使用curl命令測試gzip是否成功開啟
curl -I -H "Accept-Encoding: gzip, deflate" "http://www.qcloud.com/example/"

fastCGI管理器配置

為FastCGI緩存指定一個文件路徑、目錄結(jié)構(gòu)等級找蜜、關(guān)鍵字區(qū)域存儲時間和非活動刪除時間饼暑。levels參數(shù)設(shè)置緩存目錄的目錄分級以及子目錄的數(shù)量。fastcgi_cache緩存目錄洗做,可以設(shè)置目錄哈希層級弓叛,比如2:2會生成256*256個字目錄,keys_zone是這個緩存空間的名字诚纸,cache是用多少內(nèi)存(這樣熱門的內(nèi)容nginx直接放內(nèi)存撰筷,提高訪問速度),inactive表示默認(rèn)失效時間咬清,max_size表示最多用多少硬盤空間闭专,需要注意的是fastcgi_cache緩存是先寫在fastcgi_temp_path再移到fastcgi_cache_path,所以這兩個目錄最好在同一個分區(qū)旧烧,從0.8.9之后可以在不同的分區(qū)影钉,不過還是建議放同一分區(qū)。
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m; 
fastcgi_temp_path /usr/local/nginx/fastcgi_temp_path

指定連接到后端FastCGI的超時時間
 fastcgi_connect_timeout 300;

向FastCGI傳送請求的超時時間掘剪,這個值是指已經(jīng)完成兩次握手后向FastCGI傳送請求的超時時間平委。
fastcgi_send_timeout 300;

接收FastCGI應(yīng)答的超時時間,這個值是指已經(jīng)完成兩次握手后接收FastCGI應(yīng)答的超時時間夺谁。
fastcgi_read_timeout 300;

指定讀取FastCGI應(yīng)答第一部分 需要用多大的緩沖區(qū)廉赔,這里可以設(shè)置為fastcgi_buffers指令指定的緩沖區(qū)大小,上面的指令指定它將使用1個 16k的緩沖區(qū)去讀取應(yīng)答的第一部分匾鸥,即應(yīng)答頭蜡塌,其實(shí)這個應(yīng)答頭一般情況下都很小(不會超過1k)勿负,但是你如果在fastcgi_buffers指令中指 定了緩沖區(qū)的大小馏艾,那么它也會分配一個fastcgi_buffers指定的緩沖區(qū)大小去緩存
fastcgi_buffer_size 16k;

指定本地需要用多少和多大的緩沖區(qū)來 緩沖FastCGI的應(yīng)答,如上所示奴愉,如果一個php腳本所產(chǎn)生的頁面大小為256k琅摩,則會為其分配16個16k的緩沖區(qū)來緩存,如果大于256k锭硼,增大 于256k的部分會緩存到fastcgi_temp指定的路徑中房资, 當(dāng)然這對服務(wù)器負(fù)載來說是不明智的方案,因為內(nèi)存中處理數(shù)據(jù)速度要快于硬盤,通常這個值 的設(shè)置應(yīng)該選擇一個你的站點(diǎn)中的php腳本所產(chǎn)生的頁面大小的中間值缝呕,比如你的站點(diǎn)大部分腳本所產(chǎn)生的頁面大小為 256k就可以把這個值設(shè)置為16 16k,或者4 64k 或者64 4k廓握,但很顯然溉浙,后兩種并不是好的設(shè)置方法烫止,因為如果產(chǎn)生的頁面只有32k,如果用4 64k它會分配1個64k的緩沖區(qū)去緩存戳稽,而如果使用64 4k它會分配8個4k的緩沖區(qū)去緩存,而如果使用16 16k則它會分配2個16k去緩存頁面期升,這樣看起來似乎更加合理惊奇。
fastcgi_buffers 16 16k;

默認(rèn)值是fastcgi_buffers的兩倍。
fastcgi_busy_buffers_size 16k;

在寫入fastcgi_temp_path時將用多大的數(shù)據(jù)塊播赁,默認(rèn)值是fastcgi_buffers的兩倍颂郎。
fastcgi_temp_file_write_size 16k;

開啟FastCGI緩存并且為其制定一個名稱。個人感覺開啟緩存非常有用容为,可以有效降低CPU負(fù)載乓序,并且防止502錯誤。但是這個緩存會引起很多問題坎背,因為它緩存的是動態(tài)頁面替劈。具體使用還需根據(jù)自己的需求
fastcgi_cache TEST;

指定的應(yīng)答代碼指定緩存時間,如上例中將200得滤,302應(yīng)答緩存一小時陨献,301應(yīng)答緩存1天,其他為1分鐘懂更。
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;

緩存在fastcgi_cache_path指令inactive參數(shù)值時間內(nèi)的最少使用次數(shù)眨业,如上例,如果在5分鐘內(nèi)某文件1次也沒有被使用沮协,那么這個文件將被移除龄捡。
fastcgi_cache_min_uses 1;

哪些類型的緩存失效。
fastcgi_cache_use_stale error timeout invalid_header http_500;

nginx緩沖區(qū)優(yōu)化(反向代理使用)
關(guān)于緩沖, 主要是合理設(shè)置緩沖區(qū)大小, 盡量避免緩沖到硬盤時的情況如果proxy_buffering關(guān)閉慷暂,那么nginx會立即把從后端收到的響應(yīng)內(nèi)容傳送給客戶端聘殖,每
次取的大小為proxy_buffer_size的大小,這樣效率肯定會比較低呜呐。 proxy_buffering啟用時就斤,要提防使用的代理緩沖區(qū)太大。這可能會吃掉你的內(nèi)存蘑辑,限制代理能夠支持的最大并發(fā)連接數(shù)洋机。

后端服務(wù)器連接的超時時間_發(fā)起握手等候響應(yīng)超時時間
proxy_connect_timeout 20s; 

#連接成功后,后端服務(wù)器響應(yīng)時間(代理接收超時)
proxy_read_timeout 20s;  

后端服務(wù)器數(shù)據(jù)回傳時間_就是在規(guī)定時間之內(nèi)后端服務(wù)器必須傳完所有的數(shù)據(jù)
proxy_send_timeout 20s;

一次訪問能寫入的臨時文件的大小洋魂,默認(rèn)是 proxy_buffer_size 和 proxy_buffers 中設(shè)置的緩沖區(qū)大小的2倍绷旗,Linux下一般是8k喜鼓。
proxy_temp_file_write_size 64k;

proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區(qū)
proxy_cache_path 緩存文件路徑
levels 設(shè)置緩存文件目錄層次;levels=1:2 表示兩級目錄
keys_zone 設(shè)置緩存名字和共享內(nèi)存大小
inactive 在指定時間內(nèi)沒人訪問則被刪除
max_size 最大緩存空間衔肢,如果緩存空間滿庄岖,默認(rèn)覆蓋掉緩存時間最長的資源。
proxy_temp_path /xxx/proxy_temp_path;   緩存目錄
proxy_cache_path 
  /xxx/proxy_cache_path 
  levels=1:2 
  keys_zone=cache_one:2000m
  inactive=1d
  max_size=5m;

proxy_buffering開啟的情況下角骤,nignx會把后端返回的內(nèi)容先放到緩沖區(qū)當(dāng)中隅忿,然后再返回給客戶端(邊收邊傳,不是全部接收完再傳給客戶端)邦尊”惩控制是否打開后端響應(yīng)內(nèi)容的緩沖區(qū),如果這個設(shè)置為off蝉揍,那么proxy_buffers和proxy_busy_buffers_size這兩個指令將會失效链峭。 但是無論proxy_buffering是否開啟,對proxy_buffer_size都是生效的又沾。
proxy_buffering on;

響應(yīng)頭的緩沖區(qū)弊仪,沒有必要也跟著設(shè)置太大。最好單獨(dú)設(shè)置杖刷,一般設(shè)置個4k就夠了励饵。
proxy_buffer_size 4k; 

proxy_buffers的緩沖區(qū)大小一般會設(shè)置的比較大,以應(yīng)付大網(wǎng)頁挺勿。當(dāng)中單個緩沖區(qū)的大小是由系統(tǒng)的內(nèi)存頁面大小決定的曲横,Linux系統(tǒng)中一般為4k。 proxy_buffers由緩沖區(qū)數(shù)量和緩沖區(qū)大小組成的不瓶『碳担總的大小為number*size。
proxy_buffers 8 1M;  // 高速傳輸
proxy_buffer 4 32k;  //  一般情況

proxy_busy_buffers_size不是獨(dú)立的空間蚊丐,它是proxy_buffers和proxy_buffer_size的一部分熙参。nginx會在沒有完全讀完后端響應(yīng)的時候就開始向客戶端傳送數(shù)據(jù),
所以它會劃出一部分緩沖區(qū)來專門向客戶端傳送數(shù)據(jù)(這部分的大小是由proxy_busy_buffers_size來控制的麦备,建議為proxy_buffers中單個緩沖區(qū)大小的2倍)孽椰,
然后它繼續(xù)從后端取數(shù)據(jù),緩沖區(qū)滿了之后就寫到磁盤的臨時文件中凛篙。
proxy_busy_buffers_size 2M;  // 高速傳輸
proxy_busy_buffers_size 64k; //  一般情況

proxy_max_temp_file_size指定當(dāng)響應(yīng)內(nèi)容大于proxy_buffers指定的緩沖區(qū)時, 寫入硬盤的臨時文件的大小. 如果超過了這個值, Nginx將與Proxy服務(wù)器同步的傳遞內(nèi)容, 而不再緩沖到硬盤黍匾。某些請求的響應(yīng)過大,則超過buffers的部分將被緩沖到硬盤(緩沖目錄由_temp_path指令指定), 當(dāng)然這將會使讀取響應(yīng)的速度減慢, 影響用戶體驗. 可以使用proxy_max_temp_file_size指令關(guān)閉磁盤緩沖.
proxy_max_temp_file_size 0;

Nginx配置詳解

使用的用戶和組
user  www www;

指定工作衍生進(jìn)程數(shù)(一般等于CPU的總核數(shù)或總核數(shù)的兩倍)
worker_processes 8;

前方高能,請注意呛梆!下面分別是開啟了8個內(nèi)核锐涯,8個進(jìn)程(如果需要開啟16進(jìn)程,00000001 修改成00000001 00000010 代表第一個CPU內(nèi)核處理第一個和第二個進(jìn)程,有多少個進(jìn)程就寫多少個數(shù)填物,每個數(shù)的第幾位代表對應(yīng)的第幾核)
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;

下面這個指令是指當(dāng)一個nginx進(jìn)程打開的最多文件描述符數(shù)目纹腌,理論值應(yīng)該是系統(tǒng)的最多打開文件數(shù)(ulimit -n)與nginx進(jìn)程數(shù)相除霎终,但是nginx分配請求并不是那么均勻,所以最好與ulimit -n(需要在Linux上調(diào)整這個數(shù))的值保持一致升薯。
worker_rlimit_nofile 204800;

使用epoll的I/O模型莱褒,用這個模型來高效處理異步事件
use epoll;

每個進(jìn)程允許的最多連接數(shù),理論上每臺nginx服務(wù)器的最大連接數(shù)為worker_processes * worker_connections涎劈。
worker_connections 204800;

限制用戶上傳文件的大小
client_max_body_size 300m;

客戶端緩存文件的大小
client_body_buffer_size 128k;

客戶端請求內(nèi)容超時時間,1分鐘
client_body_timeout  600;

客戶端請求header頭信息的超時時間,1分鐘
client_header_timeout  600;

這個將為打開文件指定緩存广凸,默認(rèn)是沒有啟用的,max 指定緩存數(shù)量蛛枚,建議和打開文件數(shù)一致炮障,inactive 是指經(jīng)過多長時間文件沒被請求后刪除緩存。
open_file_cache max=65535 inactive=60s;

這個是指多長時間檢查一次緩存的有效信息坤候。
open_file_cache_valid 80s;

指令中的inactive參數(shù)時間內(nèi)文件的最少使用次數(shù),如果超過這個數(shù)字企蹭,文件更改信息一直是在緩存中打開的
open_file_cache_min_uses 1;

URI過長或request header過大導(dǎo)致400錯誤
#start
servername的哈希表大小 -- 客戶端請求頭緩沖區(qū)大小
server_names_hash_bucket_size 128k;

請求頭總長度大于128k時使用large_client_header_buffers設(shè)置的緩存區(qū)白筹。指令參數(shù)4為個數(shù),128k為大小谅摄,申請4個128k徒河。默認(rèn)是8k。,
large_client_header_buffers 4 128k;
#end
   
客戶端請求頭部的緩沖區(qū)大小送漠,這個可以根據(jù)你的系統(tǒng)分頁大小來設(shè)置顽照,一般一個請求的頭部大小不會超過1k,不過由于一般系統(tǒng)分頁都要大于1k闽寡,所以這里設(shè)置為分頁大小代兵。分頁大小可以用命令getconf PAGESIZE取得
client_header_buffer_size 2k;
 
可以讓sendfile()發(fā)揮作用。sendfile()可以在磁盤和TCP socket之間互相拷貝數(shù)據(jù)(或任意兩個文件描述符)爷狈。Pre-sendfile是傳送數(shù)據(jù)之前在用戶空間申請數(shù)據(jù)緩沖區(qū)植影。之后用read()將數(shù)據(jù)從文件拷貝到這個緩沖區(qū),write()將緩沖區(qū)數(shù)據(jù)寫入網(wǎng)絡(luò)涎永。sendfile()是立即將數(shù)據(jù)從磁盤讀到OS緩存思币。因為這種拷貝是在內(nèi)核完成的,sendfile()要比組合read()和write()以及打開關(guān)閉丟棄緩沖更加有效羡微。
sendfile on;

告訴nginx在一個數(shù)據(jù)包里發(fā)送所有頭文件谷饿,而不一個接一個的發(fā)送。就是說數(shù)據(jù)包不會馬上傳送出去妈倔,等到數(shù)據(jù)包最大時博投,一次性的傳輸出去,這樣有助于解決網(wǎng)絡(luò)堵塞启涯。tcp_nopush 這個參數(shù)只有 sendfile on 的時候才有用贬堵。
tcp_nopush on;

告訴nginx不要緩存數(shù)據(jù)恃轩,而是一段一段的發(fā)送--當(dāng)需要及時發(fā)送數(shù)據(jù)時,
就應(yīng)該給應(yīng)用設(shè)置這個屬性黎做,這樣發(fā)送一小塊數(shù)據(jù)信息時就不能立即得到返回值叉跛。
tcp_nodelay 只在 keepalive 連接狀態(tài)中使用。
tcp_nodelay on;

http連接超時時間蒸殿,默認(rèn)是60s筷厘,功能是使客戶端到服務(wù)器端的連接在設(shè)定的時間內(nèi)持續(xù)有效,當(dāng)出現(xiàn)對服務(wù)器的后繼請求時宏所,該功能避免了建立或者重新建立連接酥艳。切記這個參數(shù)也不能設(shè)置過大!否則會導(dǎo)致許多無效的http連接占據(jù)著nginx的連接數(shù)爬骤,終nginx崩潰充石!在一般情況下,這個配置會減少網(wǎng)絡(luò)流量的消耗霞玄,減少請求連接數(shù)骤铃,例如用戶在瀏覽網(wǎng)頁的時候保持連接,減少連接數(shù)的開銷坷剧。但是在高并發(fā)下惰爬,這個配置會直接影響NGINX的性能。相反惫企,這個數(shù)調(diào)小可以提高并發(fā)數(shù)撕瞧。
keepalive_timeout 60;

下面這個參數(shù)將為打開文件指定緩存,默認(rèn)是沒有啟用的狞尔,max指定緩存數(shù)量丛版,建議和打開文件數(shù)一致,inactive是指經(jīng)過多長時間文件沒被請求后刪除緩存沪么。
open_file_cache max=204800 inactive=20s;

open_file_cache指令中的inactive參數(shù)時間內(nèi)文件的最少使用次數(shù)硼婿,如果超過這個數(shù)字,
文件描述符一直是在緩存中打開的禽车,如上例寇漫,如果有一個文件在inactive時間內(nèi)一次沒被使用,它將被移除
open_file_cache_min_uses 1;
  
下面這個是指多長時間檢查一次緩存的有效信息殉摔。
open_file_cache_valid 30s;
  
隱藏響應(yīng)頭中的有關(guān)操作系統(tǒng)和web server(Nginx)版本號的信息州胳,這樣對于安全性是有好處的。
server_tokens off;



另外逸月,F(xiàn)astCGI自身也有一些配置需要進(jìn)行優(yōu)化栓撞,如果你使用php-fpm來管理FastCGI,可以修改配置文件中的以下值:
同時處理的并發(fā)請求數(shù),即它將開啟最多60個子線程來處理并發(fā)連接瓤湘。
<value name="max_children">60</value>

最多打開文件數(shù)瓢颅。
<value name="rlimit_files">65535</value>

每個進(jìn)程在重置之前能夠執(zhí)行的最多請求數(shù)。
<value name="max_requests">65535</value>

參考文章
http://blog.csdn.net/mary881225/article/details/70173907
http://www.vpsee.com/2009/06/64mb-vps-optimize-nginx/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弛说,一起剝皮案震驚了整個濱河市挽懦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌木人,老刑警劉巖信柿,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異醒第,居然都是意外死亡渔嚷,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門稠曼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來形病,“玉大人,你說我怎么就攤上這事霞幅≈吓螅” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵蝗岖,是天一觀的道長。 經(jīng)常有香客問我榔至,道長抵赢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任唧取,我火速辦了婚禮铅鲤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘枫弟。我一直安慰自己邢享,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布淡诗。 她就那樣靜靜地躺著骇塘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪韩容。 梳的紋絲不亂的頭發(fā)上款违,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音群凶,去河邊找鬼插爹。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赠尾。 我是一名探鬼主播力穗,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼气嫁!你這毒婦竟也來了当窗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤杉编,失蹤者是張志新(化名)和其女友劉穎超全,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邓馒,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嘶朱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了光酣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疏遏。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖救军,靈堂內(nèi)的尸體忽然破棺而出财异,到底是詐尸還是另有隱情,我是刑警寧澤唱遭,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布戳寸,位于F島的核電站,受9級特大地震影響拷泽,放射性物質(zhì)發(fā)生泄漏疫鹊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一司致、第九天 我趴在偏房一處隱蔽的房頂上張望拆吆。 院中可真熱鬧,春花似錦脂矫、人聲如沸枣耀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捞奕。三九已至,卻和暖如春拄轻,著一層夾襖步出監(jiān)牢的瞬間缝彬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工哺眯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谷浅,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像一疯,于是被迫代替她去往敵國和親撼玄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 《老男孩Linux運(yùn)維》筆記 隱藏Nginx軟件版本號 一般來說墩邀,軟件的漏洞都和版本有關(guān)掌猛。因此要盡量隱藏對訪問用戶...
    Zhang21閱讀 3,638評論 0 28
  • 一、Linux下安裝配置nginx 第一次安裝nginx,中間出現(xiàn)的問題一步步解決眉睹。 用到的工具secureCRT...
    yljava閱讀 1,660評論 0 0
  • Page 1:nginx 服務(wù)器安裝及配置文件詳解 CentOS 6.2 x86_64 安裝 nginx 1.1 ...
    xiaojianxu閱讀 8,535評論 1 41
  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成荔茬,其中,內(nèi)核的設(shè)計非常微小和簡潔竹海,完成的工作也非常簡單...
    rosekissyou閱讀 10,209評論 5 124
  • senyueer閱讀 297評論 0 0