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

資訊專欄INFORMATION COLUMN

Nginx簡(jiǎn)單介紹和常用法

IT那活兒 / 1484人閱讀
Nginx簡(jiǎn)單介紹和常用法



Nginx的簡(jiǎn)介



1. Nginx是什么

Nginx 是一個(gè)高性能的網(wǎng)頁(yè)服務(wù)器,能夠反向代理HTTP、HTTPS、SMTP、POP3、IMAP,也可以作為一個(gè)負(fù)載均衡器和 HTTP 緩存。是一個(gè)免費(fèi)、開源、高性能的 HTTP 服務(wù)器。Nginx 以其高性能、穩(wěn)定性、豐富的特性、以及簡(jiǎn)單配置和低資源消耗而著稱。Nginx 是由 Igor Sysoev 開發(fā)設(shè)計(jì)來供俄羅斯的大型門戶網(wǎng)站和搜索引擎Rambler的使用。此軟件在BSD-like協(xié)議下發(fā)行,可以在 UNIX、GNU/Linux、BSD、Mac OS X、Solaris和Microsoft Windows等操作系統(tǒng)中運(yùn)行。


2. Nginx的優(yōu)勢(shì)

與傳統(tǒng)的服務(wù)器不同,Nginx 不依賴線程來處理請(qǐng)求。相反,它使用了一個(gè)更具可擴(kuò)展性的事件驅(qū)動(dòng)(異步)體系結(jié)構(gòu)。這種體系結(jié)構(gòu)使用較小的內(nèi)存量,但更重要的是,內(nèi)存的使用量在有負(fù)載的時(shí)候更加可預(yù)測(cè)。即使你不希望同時(shí)處理數(shù)千個(gè)請(qǐng)求,但仍然可以從 Nginx 的高性能和小內(nèi)存占用中受益。Nginx所有方向都可以擴(kuò)展:從最小的VPS(Virtual Private Servers到大型的服務(wù)器集群。



Nginx的配置詳解



1. Nginx的模塊

 Nginx 的配置文件的結(jié)構(gòu)抽象成如下示意圖

Nginx 的架構(gòu)是以高度模塊化為設(shè)計(jì)基礎(chǔ),除了非常少量的核心代碼,其它的一切皆是模塊。高度抽象的模塊接口,結(jié)構(gòu)的設(shè)計(jì)簡(jiǎn)單,使得 Nginx 十分的靈活與高效,默認(rèn)情況下只會(huì)加載默認(rèn)、必須的模塊,其它的一些功能實(shí)現(xiàn)需要加載一些第三方的模塊。而配置文件中的各個(gè)指令配置項(xiàng)其實(shí)便是對(duì)模塊的一個(gè)功能配置。Nginx 在運(yùn)行時(shí)至少需要加載幾個(gè)核心的模塊和一個(gè)事件類模塊,這些模塊運(yùn)行時(shí)所支持的配置項(xiàng)稱為基礎(chǔ)配置,這樣的配置項(xiàng)很多,一般將其分為四大類:

  • 調(diào)試配置項(xiàng)

  • 必備配置項(xiàng)

  • 優(yōu)化配置項(xiàng)

  • 事件類配置項(xiàng)

在 Nginx 中有一個(gè)非常重要的核心模塊就是 ngx_http_core_module 模塊,它實(shí)現(xiàn)了靜態(tài) Web 服務(wù)器的主要功能,而其相關(guān)的配置項(xiàng)都放在 http{} 配置塊中。

一個(gè)典型、完整的靜態(tài) Web 服務(wù)器還會(huì)包含多個(gè) server 配置塊和 location 配置塊。

server 配置塊類似于 Apache 中的 VirtualHost 配置塊,用于配置虛擬主機(jī)。其中 location 用于匹配請(qǐng)求的 URI(URI 表示的是訪問路徑,除域名以外的內(nèi)容),匹配的方式有多種:

  • 精準(zhǔn)匹配

  • 忽略大小寫的正則匹配

  • 大小寫敏感的正則匹配

  • 前半部分匹配

其語法如下:

其中各個(gè)符號(hào)的含義:

=:用于精準(zhǔn)匹配,需要請(qǐng)求的 uri 與 pattern 表達(dá)式完全匹配的時(shí)候才會(huì)執(zhí)行 location 中的操作。

~:用于區(qū)分大小寫的正則匹配。

~*:用于不區(qū)分大小寫的正則匹配。

^~:用于匹配 URI 的前半部分。


2. Nginx實(shí)現(xiàn)負(fù)載均衡

負(fù)載均衡是優(yōu)化資源的利用率、最大化吞吐量、減少延遲以及確保容錯(cuò)配置的常用技術(shù)。通過配置 Nginx 實(shí)現(xiàn)負(fù)載均衡,提高了 Web 應(yīng)用程序的可伸縮性和可靠性。負(fù)載均衡的實(shí)現(xiàn)主要依賴于反向代理與upstream相關(guān)模塊。

upstream 模塊(模塊名:ngx_http_upstream_module)是 Nginx 負(fù)載均衡的主要模塊,它提供了實(shí)現(xiàn)后臺(tái)服務(wù)器負(fù)載均衡的方法,還提供對(duì)后端服務(wù)器健康檢查的功能。

Nginx 模塊一般分為三類:handler、filter、upstream。upstream 模塊本質(zhì)上屬于 handler 模塊,但是它不會(huì)產(chǎn)生自己的內(nèi)容,而是通過請(qǐng)求其它后端服務(wù)器得到需要的內(nèi)容。

Upstream 模塊,使 Nginx 跨越單機(jī)的限制,完成網(wǎng)絡(luò)數(shù)據(jù)的接收、處理和轉(zhuǎn)發(fā)。

數(shù)據(jù)轉(zhuǎn)發(fā)功能,為 Nginx 提供了跨越單機(jī)的橫向處理能力,使 Nginx 擺脫只能為終端節(jié)點(diǎn)提供單一功能的限制,而使它具備了網(wǎng)路應(yīng)用級(jí)別的拆分、封裝和整合的戰(zhàn)略功能。

Nginx 有著很強(qiáng)大的高并發(fā)、高負(fù)載的能力。當(dāng)客戶端發(fā)出靜態(tài)文件請(qǐng)求(例如前端頁(yè)面)時(shí),Nginx 會(huì)作為一個(gè)靜態(tài) web 服務(wù)器直接向客戶端提供靜態(tài)文件服務(wù)。當(dāng)客戶端發(fā)出不適合 Nginx 提供服務(wù)的動(dòng)態(tài)請(qǐng)求時(shí),Nginx 會(huì)作為一個(gè)反向代理服務(wù)器,將請(qǐng)求轉(zhuǎn)發(fā)到上游服務(wù)器中處理,處理后返回的動(dòng)態(tài)應(yīng)答再由 Nginx 轉(zhuǎn)發(fā)給客戶端。

proxy_pass 便是 HTTP proxy module 中重要配置項(xiàng),通過該配置項(xiàng)我們可以配置將請(qǐng)求轉(zhuǎn)發(fā)給哪一臺(tái)服務(wù)節(jié)點(diǎn)、或者哪一個(gè)服務(wù)群。當(dāng)設(shè)置轉(zhuǎn)發(fā)給某一個(gè)節(jié)點(diǎn)時(shí),其格式為 proxy_pass http://ip或者域名:端口, 當(dāng)需要轉(zhuǎn)發(fā)給某一個(gè)服務(wù)器群時(shí),需要結(jié)合 upstream 使用。

在默認(rèn)的負(fù)載均衡上,nginx 還支持一些調(diào)度算法來配置:

1)最少連接負(fù)載均衡:下一個(gè)請(qǐng)求被分配給連接數(shù)最少的服務(wù)器。

2)加權(quán)負(fù)載均衡:通過使用權(quán)重,來實(shí)現(xiàn)負(fù)載均衡。

3) ip-hash 負(fù)載均衡:將客戶端的 IP 地址用作哈希鍵,以決定服務(wù)器組中應(yīng)該為客戶端請(qǐng)求選擇什么服務(wù)器。此方法可確保來自同一客戶端的請(qǐng)求將始終定向到同一服務(wù)器,除非此服務(wù)器不可用。


3. 反向代理

反向代理(Reverse Proxy)是指:代理服務(wù)器接受來自客戶端的請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)到內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將服務(wù)器的響應(yīng)返回給客戶端。與之對(duì)應(yīng)的是正向代理,具體的內(nèi)容將在后面的實(shí)驗(yàn)中詳細(xì)介紹。

反向代理服務(wù)器在網(wǎng)絡(luò)拓?fù)渲兴幍奈恢茫ㄈ缟蠄D所示)正好是負(fù)載均衡設(shè)備所在的位置,因此我們常常使用反向代理服務(wù)器作為負(fù)載均衡設(shè)備。反向代理服務(wù)器根據(jù)當(dāng)前后端服務(wù)器的負(fù)載情況,將請(qǐng)求轉(zhuǎn)發(fā)給一臺(tái)合適的服務(wù)器,并將處理結(jié)果返回給用戶,這就是反向代理負(fù)載均衡。

其它常見的 Web 負(fù)載均衡方式包括:DNS 輪詢、IP 負(fù)載均衡、HTTP 重定向負(fù)載均衡等。


4. 正向代理

正向代理服務(wù)器是一個(gè)位于客戶端和目標(biāo)服務(wù)器之間的服務(wù)器,即下圖中的服務(wù)器 Proxy ,它通常和客戶端在同一局域網(wǎng)(也有可能不是)。客戶端為了從目標(biāo)服務(wù)器 Server 取得它想要的內(nèi)容,它首先向代理服務(wù)器發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)(即要訪問的目標(biāo)服務(wù)器),然后代理服務(wù)器 Proxy 向目標(biāo)服務(wù)器 Server 轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶端。

正向代理的用途:

隱藏客戶端的信息:客戶端通過代理服務(wù)器訪問目標(biāo)服務(wù)器,因此目標(biāo)服務(wù)器只知道請(qǐng)求來自哪個(gè)代理服務(wù)器,而不清楚來自哪個(gè)具體的客戶端,隱藏了真實(shí)的客戶端信息。

訪問限制:代理服務(wù)器可以對(duì)客戶端進(jìn)行控制管理,提高安全性。

緩存優(yōu)化、提高訪問速度:通常代理服務(wù)器都設(shè)置一個(gè)較大的硬盤緩沖區(qū),會(huì)將部分請(qǐng)求的響應(yīng)保存到緩沖區(qū)中,當(dāng)其他用戶再訪問相同的信息時(shí),則直接由緩沖區(qū)中取出信息,傳給用戶,以提高訪問速度。

正向代理服務(wù)器與反向代理服務(wù)器兩者的相同點(diǎn)是:所處的位置都是客戶端和服務(wù)器之間,都是將客戶端的請(qǐng)求轉(zhuǎn)發(fā)給服務(wù)器,再把服務(wù)器的響應(yīng)轉(zhuǎn)發(fā)給客戶端。兩者不同的是:

  • 反向代理是服務(wù)器的代理,有負(fù)載均衡、安全防護(hù)等功能;正向代理是客戶端的代理,幫助客戶端訪問其無法訪問的服務(wù)器資源,解決訪問限制問題。

  • 正向代理中,服務(wù)器不知道真正的客戶端到底是誰,以為訪問自己的就是真實(shí)的客戶端。而在反向代理中,客戶端不知道真正的服務(wù)器是誰,以為自己訪問的就是真實(shí)的服務(wù)器。

1)請(qǐng)求頭處理

proxy_set_header 用于修改或設(shè)置請(qǐng)求頭中某個(gè)字段 field 的值 value,重定義發(fā)往后端服務(wù)器的請(qǐng)求頭。

proxy_set_header field value;

常用的有以下兩種:

  • proxy_set_header Host $http_host;:
    在 Nginx 代理向后端服務(wù)器(即我們?cè)L問的 Web 服務(wù)器)發(fā)送的 http 請(qǐng)求頭中加入 Host 字段信息,用于后端服務(wù)器識(shí)別是哪個(gè)主機(jī)訪問。

  • proxy_set_header X-Forwarded-For $remote_addr;:
    在 Nginx 代理向后端服務(wù)器發(fā)送 http 請(qǐng)求頭加入 X-Forwarded-For 字段信息,用于后端服務(wù)器中的服務(wù)程序記錄真實(shí)的客戶端 IP,而不是代理服務(wù)器的 IP。

配置請(qǐng)求頭:

2)連接時(shí)間優(yōu)化

設(shè)置超時(shí)時(shí)間是為了保證一個(gè)請(qǐng)求占用固定的時(shí)間,超出之后返回給客戶端一個(gè)狀態(tài)碼:504 Gateway Time-out(充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器,未及時(shí)從遠(yuǎn)端服務(wù)器獲取請(qǐng)求),可以防止出現(xiàn)一個(gè)請(qǐng)求占用過長(zhǎng)時(shí)間的現(xiàn)象。這里介紹四個(gè)關(guān)于超時(shí)時(shí)間設(shè)置的指令,分為兩大類:

  • 設(shè)置解析超時(shí)時(shí)間:

    resolver_timeout 指令。

    解析超時(shí)時(shí)間使用指令 resolver_timeout 來設(shè)置。這個(gè)時(shí)間是指 Nginx 連接 DNS 解析服務(wù)器的時(shí)間,如果在指定時(shí)間內(nèi)沒有連接上 DNS 解析服務(wù)器,則判定為連接超時(shí)。

  • 代理連接超時(shí)時(shí)間:

    proxy_connect_timeout 指令。

    proxy_connect_timeout 指令用于設(shè)置正向代理服務(wù)器與 Web 服務(wù)器連接的超時(shí)時(shí)間(即發(fā)起 TCP 握手等候的超時(shí)時(shí)間)。如果在指定時(shí)間內(nèi)沒有與 Web 服務(wù)器建立 TCP 連接,則判定為超時(shí)。

    proxy_send_timeout 指令。

    proxy_send_timeout 指令用于設(shè)置 Nginx 代理服務(wù)器向 Web 服務(wù)器傳輸請(qǐng)求的超時(shí)時(shí)間。這個(gè)時(shí)間是指相鄰兩次寫操作之間的最長(zhǎng)時(shí)間間隔,而不是整個(gè)請(qǐng)求傳輸完成的最長(zhǎng)時(shí)間。如果 Nginx 代理服務(wù)器在超時(shí)時(shí)間段內(nèi)沒有發(fā)送任何數(shù)據(jù),TCP 連接將被關(guān)閉。

    proxy_read_timeout 指令。

    proxy_read_timeout 指令用于設(shè)置 Nginx 代理服務(wù)器從 Web 服務(wù)器獲取響應(yīng)信息的超時(shí)時(shí)間。連接建立成功后,Nginx 等待 Web 服務(wù)器的響應(yīng),如果在指定的時(shí)間內(nèi) Web 服務(wù)器沒有發(fā)送數(shù)據(jù),那么 Nginx 會(huì)斷開 TCP 連接。

    比如設(shè)置解析超時(shí)時(shí)間為 5 分鐘,配置中應(yīng)該這么寫:resolver_timeout 5m;

3)緩沖優(yōu)化

Nginx 正向代理服務(wù)器是客戶端和后端服務(wù)器溝通的橋梁,后端服務(wù)器的響應(yīng)必然會(huì)返回給 Nginx 正向代理服務(wù)器,然后 Nginx 代理服務(wù)器再將響應(yīng)傳遞給客戶端。因?yàn)榭蛻舳说倪B接速度往往是不同的,甚至可能速度差距十分大。如果客戶端是緩慢的,在有緩沖的情況下,Nginx 代理會(huì)將后端服務(wù)的響應(yīng)臨時(shí)存儲(chǔ)到緩沖區(qū),然后按客戶端的連接速度發(fā)送給客戶端。如果客戶端連接速度很快,緩沖可以關(guān)閉,使數(shù)據(jù)盡快到達(dá)客戶端。在本實(shí)驗(yàn)中,我們配置有緩沖的 Nginx 代理服務(wù)器。Nginx 代理服務(wù)器將響應(yīng)臨時(shí)存儲(chǔ)到緩沖區(qū)中,但是臨時(shí)緩沖區(qū)是會(huì)預(yù)設(shè)空間大小的,如果超出設(shè)定的大小時(shí),緩沖就會(huì)寫入到磁盤中。緩沖優(yōu)化主要是要合理設(shè)置緩沖區(qū)大小,盡量避免緩沖到硬盤時(shí)的情況。

緩沖相關(guān)指令:

proxy_buffering on | off

proxy_buffering 的作用是配置是否啟用 Proxy Buffer。

proxy_buffer_size

proxy_buffer_size 指令配置從被代理服務(wù)器獲取的第一份響應(yīng)數(shù)據(jù)的大小。這個(gè)響應(yīng)數(shù)據(jù)中一般包含了 http 響應(yīng)頭,Nginx 通過它來獲取響應(yīng)數(shù)據(jù)和被代理數(shù)據(jù)的一些必要信息。

proxy_buffers

proxy_buffers 指令用于配置接受一次響應(yīng)的 buffer 個(gè)數(shù)和每個(gè) buffer 的大小。緩沖區(qū)總的大小為 number*size。若某些請(qǐng)求的響應(yīng)過大,則超過 buffer 的部分將被緩沖到硬盤(緩沖目錄由 proxy_temp_path 指令指定,但一般都選擇關(guān)閉磁盤緩沖),如果數(shù)據(jù)緩沖到硬盤會(huì)使響應(yīng)的速度減慢,影響用戶體驗(yàn)。

proxy_busy_buffers_size

Nginx 會(huì)在沒有完全讀完后端響應(yīng)的時(shí)候就開始向客戶端傳送數(shù)據(jù),所以它會(huì)劃出一部分緩沖區(qū)來專門向客戶端傳送數(shù)據(jù)(這部分的大小是由 proxy_busy_buffers_size 來控制的),然后它繼續(xù)從后端取數(shù)據(jù),緩沖區(qū)滿了之后就寫到磁盤的臨時(shí)文件中。proxy_busy_buffers_size 指令用于配置處于 busy 狀態(tài)的 Proxy Buffer 的總大小,一般設(shè)置為 proxy_buffers 中單個(gè)緩沖區(qū)大小的 2 倍。

proxy_max_temp_file_size

proxy_max_temp_file_size 用于配置所有臨時(shí)文件的總體積大小。(臨時(shí)文件是指緩沖區(qū)滿了之后存放到硬盤的文件)


END


更多精彩干貨分享

點(diǎn)擊下方名片關(guān)注

IT那活兒

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

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

相關(guān)文章

  • Docker實(shí)戰(zhàn)指南(二):在Docker中搭建Nginx服務(wù)器

    摘要:原文地址實(shí)戰(zhàn)指南二在中搭建服務(wù)器學(xué)習(xí)最快的方法就是直接使用,在實(shí)戰(zhàn)指南一介紹中,我們已經(jīng)介紹了如何快速搭建,以及如何在中運(yùn)行我們的第一個(gè)程序。 原文地址:Docker實(shí)戰(zhàn)指南(二):在Docker中搭建Nginx服務(wù)器 Introduction 學(xué)習(xí)Docker最快的方法就是直接使用,在Docker實(shí)戰(zhàn)指南(一):Docker介紹中,我們已經(jīng)介紹了如何快速搭建Docker,以及如何在D...

    Jensen 評(píng)論0 收藏0
  • nginx(一):基本配置介紹

    摘要:本博客首發(fā)在,后因各種原因遷移至先來一波官方站點(diǎn)關(guān)于介紹。同時(shí)擁有一套緩存機(jī)制,可以進(jìn)一步降低網(wǎng)絡(luò)壓力,加速用戶響應(yīng)。主配置文件中,使用命令引用分支配置文件。接收到一個(gè)請(qǐng)求后,先與所有標(biāo)準(zhǔn)進(jìn)行匹配,并記錄匹配度最高的一個(gè)。 本博客首發(fā)在cnblogs,后因各種原因遷移至segmentfault 先來一波官方站點(diǎn)關(guān)于nginx介紹。nginx相關(guān)歷史這里不再贅述啦。showImg(ht...

    liuchengxu 評(píng)論0 收藏0
  • nginx(二):進(jìn)階配置介紹--rewrite用法,壓縮,https虛擬主機(jī)等

    摘要:經(jīng)由超文本傳輸協(xié)議通信,但是數(shù)據(jù)包由安全協(xié)議加密,實(shí)現(xiàn)加密數(shù)據(jù)與認(rèn)證功能。該模塊指令定義相關(guān)設(shè)置證書文件,私鑰文件,會(huì)話緩存等內(nèi)容。允許在客戶端建立會(huì)話時(shí)傳遞請(qǐng)求服務(wù)器名稱,這樣服務(wù)器就會(huì)知道該發(fā)送哪個(gè)虛擬主機(jī)下的證書文件。 1、nginx基本狀態(tài)信息頁(yè)面 配置示例: location /basic_status { stub_...

    JayChen 評(píng)論0 收藏0
  • NGINX的奇淫技巧 —— 2. IF AND 和 OR

    摘要:在上一篇文章里的奇淫技巧字符串截?cái)嘀形覀兘榻B過了使用來進(jìn)行截?cái)嘧址挠梅ㄟ@次我們來了解下的邏輯用法什么是邏輯用法呢就程序中的關(guān)系就叫做邏輯了支持的與或者與嗎答案是當(dāng)你嘗試這樣配置重載時(shí)會(huì)報(bào)出錯(cuò)誤那么我們應(yīng)該怎樣來實(shí)現(xiàn)和的邏輯關(guān)系呢 在上一篇文章:《NGINX里的奇淫技巧 —— 1. 字符串截?cái)唷分? 我們介紹過了使用if來進(jìn)行截?cái)嘧址挠梅? 這次我們來了解下if的邏輯用法: 什...

    CarterLi 評(píng)論0 收藏0
  • 在Kubernetes上運(yùn)行SAP UI5應(yīng)用(上)

    摘要:在上海研究院的同事們?nèi)绻雲(yún)⒓舆@個(gè)內(nèi)部培訓(xùn),可以聯(lián)系同事。第三行命名執(zhí)行命令,生成新的鏡像文件。說句題外話雖然今年月份被微軟收購(gòu)了,但是用戶體驗(yàn)一點(diǎn)也沒變,一如既往的優(yōu)秀。關(guān)于更多另類用法,請(qǐng)參閱的文章寫在被微軟收購(gòu)之際的那些另類用法。 2018年只剩最后30天了。Jerry在2017年的最后一天,曾經(jīng)立下一個(gè)目標(biāo):這個(gè)微信公眾號(hào)在2018年保證至少每周發(fā)布一篇SAP原創(chuàng)技術(shù)文章。 從...

    acrazing 評(píng)論0 收藏0
  • 在Kubernetes上運(yùn)行SAP UI5應(yīng)用(上)

    摘要:在上海研究院的同事們?nèi)绻雲(yún)⒓舆@個(gè)內(nèi)部培訓(xùn),可以聯(lián)系同事。第三行命名執(zhí)行命令,生成新的鏡像文件。說句題外話雖然今年月份被微軟收購(gòu)了,但是用戶體驗(yàn)一點(diǎn)也沒變,一如既往的優(yōu)秀。關(guān)于更多另類用法,請(qǐng)參閱的文章寫在被微軟收購(gòu)之際的那些另類用法。 2018年只剩最后30天了。Jerry在2017年的最后一天,曾經(jīng)立下一個(gè)目標(biāo):這個(gè)微信公眾號(hào)在2018年保證至少每周發(fā)布一篇SAP原創(chuàng)技術(shù)文章。 從...

    張紅新 評(píng)論0 收藏0

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<