国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

切圖仔的 Nginx 小書(shū)?

pubdreamcc / 2481人閱讀

摘要:切圖仔的小書(shū)本文陸續(xù)介紹的功能配置及一些實(shí)用場(chǎng)景待完善。更可貴的是配置簡(jiǎn)單文檔豐富大大降低了學(xué)習(xí)的門(mén)檻。為什么選擇自年發(fā)布以來(lái),一直是服務(wù)器市場(chǎng)的霸主。雖然發(fā)布較晚,但是卻因?yàn)樵诟卟l(fā)下卓越的表現(xiàn)而迅速嶄露頭角。

切圖仔的 Nginx 小書(shū)

本文陸續(xù)介紹 Nginx 的功能、配置、及一些實(shí)用場(chǎng)景(待完善...)。

一、介紹 Nginx 1. Nginx 是什么?

Nginx,很多工程師喜歡讀成"恩基克思"。Nginx 是一款高性能的HTTP和反向代理服務(wù)器軟件,第一個(gè)開(kāi)源版本誕生于2004年,雖然誕生較晚但經(jīng)過(guò)十多年的發(fā)展,已經(jīng)成為非常流行的 web 服務(wù)器軟件。其發(fā)展速度和流行程度已經(jīng)遠(yuǎn)遠(yuǎn)超過(guò)其它同類軟件,成為大型網(wǎng)站和高并發(fā)網(wǎng)站的首選。

2. Nginx 為什么流行

Nginx 之所以能夠脫穎而出,一方面是因?yàn)槭袌?chǎng)往往會(huì)選擇簡(jiǎn)單實(shí)用的技術(shù),另一方面是因?yàn)閣eb服務(wù)器的高并發(fā)已經(jīng)成為趨勢(shì),而高并發(fā)又要求架構(gòu)具有健壯性和可伸縮性。Nginx 的特性迎合了市場(chǎng)的這個(gè)發(fā)展趨勢(shì),它是為性能而生,從發(fā)布以來(lái)一直側(cè)重于高性能,高并發(fā),低 CPU 內(nèi)存消耗;在功能方面:負(fù)載均衡,反向代理,訪問(wèn)控制,熱部署,高擴(kuò)展性等特性又十分適合現(xiàn)代的網(wǎng)絡(luò)架構(gòu)。更可貴的是配置簡(jiǎn)單文檔豐富,大大降低了學(xué)習(xí)的門(mén)檻。這樣穩(wěn)定,性能強(qiáng),功能豐富又簡(jiǎn)單的產(chǎn)品當(dāng)然會(huì)受歡迎了。

3. 為什么選擇 Nginx?

Apache 自1990年發(fā)布以來(lái),一直是 web 服務(wù)器市場(chǎng)的霸主。Nginx 雖然發(fā)布較晚,但是卻因?yàn)樵诟卟l(fā)下卓越的表現(xiàn)而迅速嶄露頭角。最初,Nginx 只是作為 Apache 在高并發(fā)場(chǎng)景下的補(bǔ)充,兩者結(jié)合輔助使用。而現(xiàn)在,Nginx 隨著迭代功能,在極多數(shù)場(chǎng)合已經(jīng)可以拋棄老大哥來(lái)獨(dú)當(dāng)一面了。

Nginx 和 Apache 相同點(diǎn):

同是 Http 服務(wù)器軟件,都采用模塊化結(jié)構(gòu)設(shè)計(jì)

支持通用語(yǔ)言接口,如 PHP,Python 等。

支持正向代理和反向代理。

支持虛擬主機(jī)以及 SSL 加密傳輸

支持緩存以及壓縮傳輸

支持 URL 重寫(xiě)

模塊多,擴(kuò)展性強(qiáng)

多平臺(tái)支持

Nginx 的優(yōu)勢(shì):

輕量級(jí),安裝簡(jiǎn)單、配置文件簡(jiǎn)潔,運(yùn)行時(shí) CPU 內(nèi)存使用率低。

性能強(qiáng) 支持多核,處理靜態(tài)文件效率高。

支持熱部署,啟動(dòng)速度快,可以在不間斷服務(wù)情況下對(duì)軟件和配置進(jìn)行升級(jí)

負(fù)載均衡 支持容錯(cuò)和健康檢查

代理功能強(qiáng)大 支持無(wú)緩存的方向代理,同時(shí)支持 IMAP/POPS/SMTP 的代理

Nginx 的劣勢(shì):

相對(duì)于老大哥 Apache 模塊要少一些

對(duì)動(dòng)態(tài)請(qǐng)求的支持不如 Apache

Windows 版本功能有限,受限于 Windows 的特性,支持最好的還是 *unix 系統(tǒng)

4. Nginx 的工作原理

Nginx 由內(nèi)核和一系列模塊組成,內(nèi)核提供 Web Server 的基本功能,如啟動(dòng)網(wǎng)絡(luò)協(xié)議,創(chuàng)建運(yùn)行環(huán)境,接收和分配客戶端請(qǐng)求,處理模塊之間的交互。Nginx 的各種功能和操作都由模塊來(lái)實(shí)現(xiàn)。
Nignx 的模塊從結(jié)構(gòu)上分為:

核心模塊:HTTP 模塊、EVENT 模塊和 MAIL 模塊

基礎(chǔ)模塊:HTTP Access 模塊、HTTP FastCGI 模塊、HTTP Proxy 模塊和 HTTP Rewrite 模塊

第三方模塊:HTTP Upstream Request Hash 模塊、Notice 模塊和HTTP Access Key 模塊以及其它自開(kāi)發(fā)模塊。

這樣的設(shè)計(jì)使 Nginx 方便開(kāi)發(fā)和擴(kuò)展,也正因此才使得 Nginx 功能如此強(qiáng)大。Nginx 的模塊默認(rèn)編譯進(jìn) Nginx 中,如果需要增加或刪除模塊,需要重新編譯 Nginx ,這一點(diǎn)不如 Apache 的動(dòng)態(tài)模塊加載方便。(如果需動(dòng)態(tài)加載模塊,可以使用兼容 Nginx 的web服務(wù)器 Tengine )

5. Nginx 的請(qǐng)求處理

Nginx 使用一個(gè)多進(jìn)程模型來(lái)應(yīng)對(duì)外來(lái)需求,其中一個(gè) master 進(jìn)程,多個(gè) worker 進(jìn)程。master 進(jìn)程負(fù)責(zé)管理 Nginx 本身和其他 worker 進(jìn)程。

所有實(shí)際上的業(yè)務(wù)處理邏輯都在 worker 進(jìn)程,其內(nèi)有一個(gè)無(wú)限循環(huán)執(zhí)行的函數(shù),不斷處理來(lái)自客戶端的請(qǐng)求,并進(jìn)行處理,直到整個(gè) Nginx 服務(wù)停止。

worker 進(jìn)程中,ngx_worker_process_cycle() 就是這個(gè)無(wú)線循環(huán)的函數(shù)。內(nèi)部對(duì)一個(gè)請(qǐng)求的簡(jiǎn)單處理流程如下:

操作系統(tǒng)提供的機(jī)制產(chǎn)生相關(guān)的事件

接受和處理這些事件,如果是接收數(shù)據(jù),則產(chǎn)生更高層的request對(duì)象

處理 request 的 header 和 body

產(chǎn)生響應(yīng),并發(fā)送回客戶端

完成 request 的處理

重新初始化定時(shí)器及其他事件

如圖展示了 Nginx 模塊常規(guī)的HTTP請(qǐng)求和響應(yīng)的過(guò)程:

二、Nginx 配置
#運(yùn)行用戶
user nobody;
#啟動(dòng)進(jìn)程,通常設(shè)置成和cpu的數(shù)量相等
worker_processes  1;
 
#全局錯(cuò)誤日志及PID文件
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
#工作模式及連接數(shù)上限
events {
    #單個(gè)后臺(tái)worker process進(jìn)程的最大并發(fā)鏈接數(shù)    
    worker_connections  1024;
}
 
 
http {
    #設(shè)定mime類型,類型由mime.type文件定義
    include    mime.types;
    default_type  application/octet-stream;
    #設(shè)定日志格式
    log_format  main  "$remote_addr - $remote_user [$time_local] "$request" "
                      "$status $body_bytes_sent "$http_referer" "
                      ""$http_user_agent" "$http_x_forwarded_for"";
 
    access_log  logs/access.log  main;
 
    #sendfile 指令指定 nginx 是否調(diào)用 sendfile 函數(shù)(zero copy 方式)來(lái)輸出文件,
    #對(duì)于普通應(yīng)用,必須設(shè)為 on,
    #如果用來(lái)進(jìn)行下載等應(yīng)用磁盤(pán)IO重負(fù)載應(yīng)用,可設(shè)置為 off,
    #以平衡磁盤(pán)與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的uptime.
    sendfile     on;
    #tcp_nopush     on;
 
    #連接超時(shí)時(shí)間
    #keepalive_timeout  0;
    keepalive_timeout  65;
    
    #開(kāi)啟gzip壓縮
    #gzip  off;
 
    #設(shè)定虛擬主機(jī)配置
    server {
        #偵聽(tīng)80端口
        listen    80;
        #定義使用 www.nginx.cn訪問(wèn)
        server_name  www.nginx.cn;
 
        #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置
        root html;
 
        #設(shè)定本虛擬主機(jī)的訪問(wèn)日志
        access_log  logs/nginx.access.log  main;
 
        #默認(rèn)請(qǐng)求
        location / {
            
            #定義首頁(yè)索引文件的名稱
            index index.php index.html index.htm;   
 
        }
 
        # 定義錯(cuò)誤提示頁(yè)面
        error_page   500 502 503 504 /50x.html;
        location = /50x.html {
        }
 
        #靜態(tài)文件,nginx自己處理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
            
            #過(guò)期30天,靜態(tài)文件不怎么更新,過(guò)期可以設(shè)大一點(diǎn),
            #如果頻繁更新,則可以設(shè)置得小一點(diǎn)。
            expires 30d;
        }
 
        #PHP 腳本請(qǐng)求全部轉(zhuǎn)發(fā)到 FastCGI處理. 使用FastCGI默認(rèn)配置.
        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
 
        #禁止訪問(wèn) .htxxx 文件
            location ~ /.ht {
            deny all;
        }
 
    }
}
三、Nginx 命令行

不像其他系統(tǒng)軟件,Nginx 僅由幾個(gè)命令行參數(shù)

-c  // 為Nginx指定一個(gè)配置文件,來(lái)代替缺省的
-t // 不運(yùn)行,僅僅測(cè)試配置。
-v // 顯示Nginx的版本
-V // 顯示Nginx的版本,編譯器版本和配置參數(shù)。

Nginx 啟動(dòng)、停止、重啟命令

// 啟動(dòng)
sudo nginx
// 或者
sudo /usr/local/Cellar/nginx/1.12.0_1/bin/nginx // 如果不知道實(shí)際路徑,可以nginx —V查看

// 停止命令
ps -ef | grep nginx // 查看占用進(jìn)程
kill -QUIT nginx主進(jìn)程號(hào) // 從容停止
kill -TERM nginx主進(jìn)程號(hào) // 快速停止
kill -9 nginx主進(jìn)程號(hào) // 強(qiáng)制停止
// 或者
kill -QUIT `cat /usr/local/var/run/nginx.pid` // 如果不知道實(shí)際路徑,可以nginx —V查看
// 重啟命令
kill -QUIT `cat /usr/local/var/run/nginx.pid`
sudo /usr/local/Cellar/nginx/1.12.0_1/bin/nginx
四、Nginx 實(shí)用 場(chǎng)景1:適配PC與移動(dòng)web

一般門(mén)戶網(wǎng)站在訪問(wèn)時(shí),會(huì)有 PC 和 H5、Pad 幾個(gè)適配版本,我們常會(huì)有這樣的需求,在網(wǎng)站被訪問(wèn)時(shí)候,服務(wù)端來(lái)識(shí)別用戶是 PC 設(shè)備還是移動(dòng)設(shè)備,跳轉(zhuǎn)返回相應(yīng)適配版本的頁(yè)面。

第一步通常是判斷 HTTP 請(qǐng)求頭的 User-Agent ,基本原理是通過(guò)正則匹配判斷,有一套開(kāi)源的解決方案可以直接使用:http://detectmobilebrowsers.com/,下載 Nginx 配置即可。
第二步就是通過(guò)之前對(duì)設(shè)備的判斷,來(lái)反向代理到不同的版本。

location / {
    proxy_pass http://leju.com
    if ($mobile_rewrite = perform) {  
        proxy_pass http://m.leju.com/  # 手機(jī)版  
    }     
}

第三步,因?yàn)榭赡苠e(cuò)誤判斷設(shè)備,或者用戶就想指定訪問(wèn)某種設(shè)備版本,在頁(yè)面底部,通常會(huì)有鏈接跳轉(zhuǎn)其他版本。

同時(shí)在 Nginx 中加入判斷,如果包含指定 source 參數(shù),則指定進(jìn)入某個(gè)版本。

場(chǎng)景2:前端環(huán)境切換

前端開(kāi)發(fā)中,我們經(jīng)常需要在多個(gè)環(huán)境(開(kāi)發(fā)、內(nèi)測(cè)、外測(cè)、預(yù)發(fā)、正式環(huán)境)進(jìn)行切換。
我們通常通過(guò)切換 host 指向搭配機(jī)器綁定不同域名的方式去實(shí)現(xiàn):比如測(cè)試環(huán)境是dev.j.esf.sina.com,正式環(huán)境是j.esf.sina.com,搭配不同的 host 指向,可以形成多種組合。

而通過(guò)反向代理的Nginx,更容易處理這種代理轉(zhuǎn)發(fā)的問(wèn)題:

我們通過(guò)點(diǎn)擊頁(yè)面的環(huán)境按鈕,讓綁定的 javascript 代碼往域名下種入帶有 IP 信息的 cookie,同時(shí)刷新頁(yè)面。

Nginx 接收新的請(qǐng)求,讀取請(qǐng)求的 cookie ,如果包含指定的鍵名和值,則代理到這個(gè) IP 地址。(http header 也可以)

如果沒(méi)有,則代理到默認(rèn)的線上環(huán)境。

set $env_id “123.59.190.206”;
if( $http_cookie~* "host_id(S+)(;.*|$)"){
    set $env_id $1;
}

location / {
    proxy_set_header Host $host;
    proxy_pass   http://$env_id:80;
}

...場(chǎng)景待續(xù)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/39708.html

相關(guān)文章

  • 切圖仔的 Nginx 小書(shū)?

    摘要:切圖仔的小書(shū)本文陸續(xù)介紹的功能配置及一些實(shí)用場(chǎng)景待完善。更可貴的是配置簡(jiǎn)單文檔豐富大大降低了學(xué)習(xí)的門(mén)檻。為什么選擇自年發(fā)布以來(lái),一直是服務(wù)器市場(chǎng)的霸主。雖然發(fā)布較晚,但是卻因?yàn)樵诟卟l(fā)下卓越的表現(xiàn)而迅速嶄露頭角。 切圖仔的 Nginx 小書(shū) 本文陸續(xù)介紹 Nginx 的功能、配置、及一些實(shí)用場(chǎng)景(待完善...)。 一、介紹 Nginx 1. Nginx 是什么? Nginx,很多工程師...

    mrli2016 評(píng)論0 收藏0
  • 切圖仔的一點(diǎn)工作經(jīng)驗(yàn)

    摘要:切圖仔的一點(diǎn)工作經(jīng)驗(yàn)?zāi)サ恫徽`砍柴功一個(gè)趁手的編輯器比如自己調(diào)教好的或如,可以極大的提高自己的工作效率。如果美工做圖的時(shí)候能把什么命名字體行距內(nèi)外邊距標(biāo)注清楚,能省切圖仔多少事編寫(xiě)先創(chuàng)建好模板,常用的標(biāo)簽重置這些先帶上。 blog 切圖仔的一點(diǎn)工作經(jīng)驗(yàn) 0 磨刀不誤砍柴功 一個(gè)趁手的編輯器(比如自己調(diào)教好的st3)或IDE(如Hbuilder、webstorm),可以極大的提高自己的工作...

    Karuru 評(píng)論0 收藏0
  • 切圖仔的一點(diǎn)工作經(jīng)驗(yàn)

    摘要:切圖仔的一點(diǎn)工作經(jīng)驗(yàn)?zāi)サ恫徽`砍柴功一個(gè)趁手的編輯器比如自己調(diào)教好的或如,可以極大的提高自己的工作效率。如果美工做圖的時(shí)候能把什么命名字體行距內(nèi)外邊距標(biāo)注清楚,能省切圖仔多少事編寫(xiě)先創(chuàng)建好模板,常用的標(biāo)簽重置這些先帶上。 blog 切圖仔的一點(diǎn)工作經(jīng)驗(yàn) 0 磨刀不誤砍柴功 一個(gè)趁手的編輯器(比如自己調(diào)教好的st3)或IDE(如Hbuilder、webstorm),可以極大的提高自己的工作...

    godlong_X 評(píng)論0 收藏0
  • FEer到全棧開(kāi)發(fā)

    摘要:代碼開(kāi)發(fā)記得曾經(jīng)聽(tīng)開(kāi)發(fā)平臺(tái)的同學(xué)驕傲的講,中只有百度有全公司級(jí)別的統(tǒng)一代碼倉(cāng)庫(kù),并且使用管理代碼,不明覺(jué)厲,我也很驕傲。 前言 從前,一個(gè)類B/S架構(gòu)的應(yīng)用里,F(xiàn)Eer,或者叫切圖仔,切圖+表單驗(yàn)證就是工作的全部。無(wú)奈我所做的全部,只是整個(gè)應(yīng)用的冰山一角...責(zé)任小了,邊緣感就強(qiáng)了,owner意識(shí)自然差,視野自然受限。 感謝V8引擎的極速體驗(yàn)&chrome瀏覽器的緊隨規(guī)范,js執(zhí)行速度...

    elina 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<