成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

切圖仔的 Nginx 小書?

pubdreamcc / 2484人閱讀

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

切圖仔的 Nginx 小書

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

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

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

2. Nginx 為什么流行

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

3. 為什么選擇 Nginx?

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

Nginx 和 Apache 相同點:

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

支持通用語言接口,如 PHP,Python 等。

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

支持虛擬主機以及 SSL 加密傳輸

支持緩存以及壓縮傳輸

支持 URL 重寫

模塊多,擴展性強

多平臺支持

Nginx 的優(yōu)勢:

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

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

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

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

代理功能強大 支持無緩存的方向代理,同時支持 IMAP/POPS/SMTP 的代理

Nginx 的劣勢:

相對于老大哥 Apache 模塊要少一些

對動態(tài)請求的支持不如 Apache

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

4. Nginx 的工作原理

Nginx 由內(nèi)核和一系列模塊組成,內(nèi)核提供 Web Server 的基本功能,如啟動網(wǎng)絡(luò)協(xié)議,創(chuàng)建運行環(huán)境,接收和分配客戶端請求,處理模塊之間的交互。Nginx 的各種功能和操作都由模塊來實現(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 模塊以及其它自開發(fā)模塊。

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

5. Nginx 的請求處理

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

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

worker 進程中,ngx_worker_process_cycle() 就是這個無線循環(huán)的函數(shù)。內(nèi)部對一個請求的簡單處理流程如下:

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

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

處理 request 的 header 和 body

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

完成 request 的處理

重新初始化定時器及其他事件

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

二、Nginx 配置
#運行用戶
user nobody;
#啟動進程,通常設(shè)置成和cpu的數(shù)量相等
worker_processes  1;
 
#全局錯誤日志及PID文件
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
#工作模式及連接數(shù)上限
events {
    #單個后臺worker process進程的最大并發(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 方式)來輸出文件,
    #對于普通應(yīng)用,必須設(shè)為 on,
    #如果用來進行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為 off,
    #以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的uptime.
    sendfile     on;
    #tcp_nopush     on;
 
    #連接超時時間
    #keepalive_timeout  0;
    keepalive_timeout  65;
    
    #開啟gzip壓縮
    #gzip  off;
 
    #設(shè)定虛擬主機配置
    server {
        #偵聽80端口
        listen    80;
        #定義使用 www.nginx.cn訪問
        server_name  www.nginx.cn;
 
        #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置
        root html;
 
        #設(shè)定本虛擬主機的訪問日志
        access_log  logs/nginx.access.log  main;
 
        #默認(rèn)請求
        location / {
            
            #定義首頁索引文件的名稱
            index index.php index.html index.htm;   
 
        }
 
        # 定義錯誤提示頁面
        error_page   500 502 503 504 /50x.html;
        location = /50x.html {
        }
 
        #靜態(tài)文件,nginx自己處理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
            
            #過期30天,靜態(tài)文件不怎么更新,過期可以設(shè)大一點,
            #如果頻繁更新,則可以設(shè)置得小一點。
            expires 30d;
        }
 
        #PHP 腳本請求全部轉(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;
        }
 
        #禁止訪問 .htxxx 文件
            location ~ /.ht {
            deny all;
        }
 
    }
}
三、Nginx 命令行

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

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

Nginx 啟動、停止、重啟命令

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

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

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

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

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

第三步,因為可能錯誤判斷設(shè)備,或者用戶就想指定訪問某種設(shè)備版本,在頁面底部,通常會有鏈接跳轉(zhuǎn)其他版本。

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

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

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

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

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

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

如果沒有,則代理到默認(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;
}

...場景待續(xù)

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/39708.html

相關(guān)文章

  • 切圖仔的 Nginx 小書?

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

    mrli2016 評論0 收藏0
  • 切圖仔的一點工作經(jīng)驗

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

    Karuru 評論0 收藏0
  • 切圖仔的一點工作經(jīng)驗

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

    godlong_X 評論0 收藏0
  • FEer到全棧開發(fā)

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

    elina 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<