溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

沒(méi)想到你是這樣的Nginx!

發(fā)布時(shí)間:2020-08-09 19:33:06 來(lái)源:ITPUB博客 閱讀:204 作者:云和恩墨 欄目:數(shù)據(jù)庫(kù)

原文:http://www.enmotech.com/web/detail/1/749/1.html (復(fù)制鏈接,打開(kāi)瀏覽器即可查看)

導(dǎo)讀:Nginx是一個(gè)HTTP和反向代理服務(wù),一個(gè)郵件代理服務(wù),一個(gè)通用的TCP/UDP代理服務(wù)。Nginx可以提供HTTP、反向代理服務(wù),郵件代理服務(wù),通用的TCP/UDP代理服務(wù)。云和恩墨的zCloud數(shù)據(jù)庫(kù)云管平臺(tái)的微服務(wù)端使用Nginx提供HTTP服務(wù),并使用nginx作為內(nèi)部的反向代理解決自動(dòng)化部署安裝過(guò)程中相關(guān)組件、文件依賴包下載的問(wèn)題。


Nginx是什么



Nginx是一個(gè)HTTP和反向代理服務(wù),一個(gè)郵件代理服務(wù),一個(gè)通用的TCP/UDP代理服務(wù)。


Nginx基本功能



Nginx基本功能可以分為基本的HTTP服務(wù)、高級(jí)HTTP服務(wù)和郵寄服務(wù)三大類。

Nginx提供的基本HTTP服務(wù),可以作為HTTP代理服務(wù)器和反向代理服務(wù)器,通過(guò)緩存加速訪問(wèn);通過(guò)FastCGI,uwsgi,SCGI等提供緩存,支持負(fù)載均衡和容災(zāi);支持SSL和TLS SNI協(xié)議等。

Nginx提供高級(jí)的HTTP服務(wù),基于名稱和IP的虛擬服務(wù)器;基于IP、密碼、子請(qǐng)求的訪問(wèn)控制;支持FLV和MP4媒體傳輸;嵌入perl語(yǔ)言等。

Nginx作為郵件代理服務(wù)器支持IMAP、POP3代理服務(wù)功能;通過(guò)外部HTTP身份驗(yàn)證服務(wù)器進(jìn)行用戶身份驗(yàn)證,并將連接重定向到內(nèi)部SMTP服務(wù)器。


我們?yōu)槭裁催x擇Nginx?



為什么選擇Nginx,會(huì)必不可少地和Apache服務(wù)器做個(gè)比較,WEB服務(wù)器鼻祖Apache采用的是同步阻塞型的、多進(jìn)程模型,一個(gè)連接對(duì)應(yīng)一個(gè)進(jìn)程,高并發(fā)下會(huì)消耗大量?jī)?nèi)存,進(jìn)程間切換也會(huì)消耗大量CPU資源 ;Nginx 采用的是異步非阻塞工作模型,具備高并發(fā)、低資源消耗的特性,高度模塊化設(shè)計(jì)使 Nginx 具備很好的擴(kuò)展性,在處理靜態(tài)文件、反向代理請(qǐng)求等方面,Nginx 表現(xiàn)出很大的優(yōu)勢(shì)。

從netcraft網(wǎng)站最新統(tǒng)計(jì)情況可以看到Nginx份額逐漸在升高。已經(jīng)逐漸接近Apache占用量。


沒(méi)想到你是這樣的Nginx!


Nginx優(yōu)點(diǎn)



首先,Nginx支持高并發(fā)的同時(shí)資源消耗相比其他的服務(wù)器要低很多,據(jù)統(tǒng)計(jì)一般情況下10000個(gè)非活躍的HTTP連接在nginx中僅消耗2.5M內(nèi)存,單機(jī)峰值能達(dá)到10W連接。

支持熱部署,Master管理進(jìn)程和worker工作進(jìn)程的分離設(shè)計(jì),使得Nginx能夠提供熱部署功能。

高可靠性能各大網(wǎng)站選擇Nginx的基本條件,很多家高流量的網(wǎng)站核心服務(wù)器上都大規(guī)模使用Nginx。

BSD協(xié)議許可,不止允許免費(fèi)使用,而且允許用戶在自己的項(xiàng)目中直接使用或修改nginx源代碼。

Nginx優(yōu)點(diǎn)不止于此,期待各位的發(fā)掘。


安裝Nginx



獲取Nginx

可在http://nginx.org/en/download.html官方網(wǎng)站下載nginx各個(gè)版本。可以看到有主流版本(Mainline version),也可以說(shuō)是開(kāi)發(fā)版本,穩(wěn)定版本(Stableversion)和過(guò)期版本(Legacy versions)。


沒(méi)想到你是這樣的Nginx!



編譯安裝Nginx

編譯Nginx源代碼,需要標(biāo)準(zhǔn)的gcc編譯器,還需要automake完成竄國(guó)家makefile的工作,依賴一些第三方庫(kù),通常有pcre庫(kù)(支持rewrite模塊)、zlib庫(kù)(支持gzip模塊)、openssl庫(kù)(支持ssl模塊)。

yum -y install gcc automake make pcre-devel zlib-devel openssl-devel

下載文件后解壓可以看到目錄如下:

[root@lsl-test1 nginx-1.16.0]$ ls -ltotal 752drwxr-xr-x. 6 1001 1001 4096 Jun 18 23:19 auto-rw-r--r--. 1 1001 1001 296223 Apr 23 21:13 CHANGES-rw-r--r--. 1 1001 1001 451813 Apr 23 21:13 CHANGES.rudrwxr-xr-x. 2 1001 1001 168 Jun 18 23:19 conf-rwxr-xr-x. 1 1001 1001 2502 Apr 23 21:12 configuredrwxr-xr-x. 4 1001 1001 72 Jun 18 23:19 contribdrwxr-xr-x. 2 1001 1001 40 Jun 18 23:19 html-rw-r--r--. 1 1001 1001 1397 Apr 23 21:12 LICENSEdrwxr-xr-x. 2 1001 1001 21 Jun 18 23:19 man-rw-r--r--. 1 1001 1001 49 Apr 23 21:12 READMEdrwxr-xr-x. 9 1001 1001 91 Jun 18 23:19 src

Auto目錄放著大量腳本文件和configure腳本程序相關(guān):

  • CHANGES文件存放著本版本的改變,CHANGE.ru是俄語(yǔ)的說(shuō)明,因?yàn)镹ginx是俄羅斯人開(kāi)發(fā)的;
  • conf目錄放著配置文件;
  • configure文件是Nginx軟件的自動(dòng)腳本程序,檢察環(huán)境和生成編譯代碼需要的makefile文件;
  • contrib存放著幾個(gè)特殊腳本,目錄下readme有說(shuō)明;
  • html存放著兩個(gè).html的靜態(tài)網(wǎng)頁(yè)文件;
  • man存放了Nginx軟件幫助文檔;
  • src目錄存放了Nginx軟件的源代碼。

可以看下配置的幫助,每個(gè)參數(shù)后面都有英文解釋

[root@lsl-test1 nginx-1.16.0]$ ./configure --help --help print this message --prefix=PATH set installation prefix --sbin-path=PATH set nginx binary pathname --modules-path=PATH set modules path --conf-path=PATH set nginx.conf pathname --error-log-path=PATH set error log pathname --pid-path=PATH set nginx.pid pathname --lock-path=PATH set nginx.lock pathname --user=USER set non-privileged user for worker processes --group=GROUP set non-privileged group for worker processes --build=NAME set build name --builddir=DIR set build directory......

使用configure腳本生成make文件

[root@lsl-test1 nginx-1.16.0]$./configure --sbin-path=/nginx/nginx --conf-path=/nginx/nginx.conf --user=nginx

使用make進(jìn)行源碼編譯

make

make install安裝Nginx

make install

編譯安裝完成之后啟動(dòng)Nginx

[root@lsl-test1 contrib]$ nginx[root@lsl-test1 contrib]$ps -ef|grep nginxroot 8264 1 0 23:30 ? 00:00:00 nginx: master process nginxnginx 8265 8264 0 23:30 ? 00:00:00 nginx: worker processroot 9068 2726 0 23:47 pts/1 00:00:00 grep --color=auto nginx

可以使用-?或-h查看Nginx具體命令參數(shù)

[root@lsl-test1 ~]$ nginx -hnginx version: nginx/1.15.12Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]Options: -?,-h : this help -v : show version and exit -V : show version and configure options then exit -t : test configuration and exit -T : test configuration, dump it and exit -q : suppress non-error messages during configuration testing -s signal : send signal to a master process: stop, quit, reopen, reload -p prefix : set prefix path (default: /etc/nginx/) -c filename : set configuration file (default: /etc/nginx/nginx.conf) -g directives : set global directives out of configuration file


Nginx組成



文件組成

編譯后的Nginx主要文件組成有Nginx二進(jìn)制可執(zhí)行文件,nginx.conf配置文件,access.log訪問(wèn)日志,error.log錯(cuò)誤日志。

這里主要說(shuō)下nginx.conf配置文件,Nginx和它的模塊工作方式由配置文件決定,配置文件默認(rèn)名為nginx.conf ,放在/usr/local/nginx/conf, /etc/nginx,或者/usr/local/etc/nginx目錄下。

下面是Nginx初始化默認(rèn)的一個(gè)配置文件

user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;# Load dynamic modules. See /usr/share/nginx/README.dynamic.include /usr/share/nginx/modules/*.conf;events { worker_connections 1024;}http { 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 /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }...}

配置文件由指令和指令塊構(gòu)成,每條指令以分號(hào)結(jié)尾,指令和參數(shù)間以空格分分隔,指令快以大括號(hào){}將所多條指令組織到一起,include語(yǔ)句可以組合多個(gè)配置文件。使用#添加注釋,提高可隊(duì)形。使用$符號(hào)獲取變量。

下面我們看看nginx.conf各個(gè)指令塊的作用。

1)全局塊

全局塊是默認(rèn)配置文件從開(kāi)始到events塊之間的一部分,例如下面節(jié)選的部分默認(rèn)配置文件。主要設(shè)置一些影響Nginx服務(wù)器整體運(yùn)行的配置質(zhì)量,通常包括運(yùn)行的用戶,工作進(jìn)程數(shù),pid存放路徑,日志路徑及配置文件等。

user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;# Load dynamic modules. See /usr/share/nginx/README.dynamic.include /usr/share/nginx/modules/*.conf;

2)events指令塊

Events塊設(shè)計(jì)指令主要是影響Nginx與用戶網(wǎng)絡(luò)連接,主要包括是否允許同時(shí)接收多個(gè)網(wǎng)絡(luò)連接,選擇哪個(gè)事件驅(qū)動(dòng)模型處理請(qǐng)求,每個(gè)工作進(jìn)程支持的最大連接數(shù)等。

3)http指令塊

Http指令塊是Nginx服務(wù)器配置中的重要部分。Http指令塊中可以包含自己的全局塊,也可以包含多個(gè)server指令塊,server指令塊又可以包含location指令塊。Http全局塊中可以定義MIME_TYPE,文件引入,自定義日志、連接超時(shí)時(shí)間、連接請(qǐng)求上限數(shù)量等。

4)server指令塊

Server指令塊可以包含多個(gè)location指令塊,最常見(jiàn)的配置是監(jiān)聽(tīng)端口配置和服務(wù)名稱或者IP地址。

5)location指令塊

Location指令塊可以對(duì)特定請(qǐng)求進(jìn)行處理。地址的定向、數(shù)據(jù)緩存和應(yīng)答控制都在這部分實(shí)現(xiàn)。


進(jìn)程組成

Nginx后臺(tái)進(jìn)程有一個(gè)主進(jìn)程,和若干個(gè)工作進(jìn)程。主進(jìn)程的作用是讀取和評(píng)估配置,并維護(hù)工作進(jìn)程。工作進(jìn)程處理請(qǐng)求。Nginx依賴事件模型和依靠操作系統(tǒng)機(jī)制,有效地分發(fā)工作進(jìn)程間的請(qǐng)求。工作進(jìn)程數(shù)量配置在配置文件中,并且可以修改為給定的配置或者根據(jù)CPU核數(shù)動(dòng)態(tài)調(diào)整進(jìn)程數(shù)。

[root@lslt ~]# ps -ef|grep nginx |grep -v greproot 21960 1 0 Jun12 ? 00:00:00 nginx: master process /usr/sbin/nginxnginx 21961 21960 0 Jun12 ? 00:00:00 nginx: worker processnginx 21962 21960 0 Jun12 ? 00:00:00 nginx: worker processnginx 21963 21960 0 Jun12 ? 00:00:00 nginx: worker processnginx 21964 21960 0 Jun12 ? 00:00:00 nginx: worker process

可以看到實(shí)際運(yùn)行進(jìn)程工作進(jìn)程和配置文件數(shù)量是一致的。

[root@lslt ~]# cat /etc/nginx/nginx.conf |grep workworker_processes 4;worker_connections 1024;

Nginx為什么采用管理進(jìn)程和工作進(jìn)程分開(kāi)的模式呢?主要好處有以下兩點(diǎn):

1)主進(jìn)程不對(duì)用戶請(qǐng)求提供服務(wù),只用于管理提供服務(wù)的工作進(jìn)程,所以主進(jìn)程可以是唯一的,可以啟停服務(wù)、重載配置文件、平滑升級(jí)程序等。主進(jìn)程需要擁有較大的權(quán)限,工作進(jìn)程的權(quán)限要小于或等于主進(jìn)程,這樣主進(jìn)程才可以完全地管理工作進(jìn)程。當(dāng)任意一個(gè)工作進(jìn)程出現(xiàn)錯(cuò)誤時(shí),主進(jìn)程可以啟動(dòng)新的工作進(jìn)程繼續(xù)服務(wù)。

2)多個(gè)工作進(jìn)程可以提供健壯性,一個(gè)進(jìn)程異常后,其他進(jìn)程可以正常處理請(qǐng)求。更重要的是可以實(shí)現(xiàn)多核并發(fā)處理。通常推薦工作進(jìn)程數(shù)量和CPU核數(shù)相等,這樣每個(gè)工作進(jìn)程綁定到CPU核上,進(jìn)程間切換代價(jià)最小。


關(guān)于 zCloud


云和恩墨zCloud數(shù)據(jù)庫(kù)云服務(wù)管理平臺(tái),用于幫助客戶以更低成本、更快方式、更安全的策略,實(shí)現(xiàn)企業(yè)私有云或行業(yè)云的數(shù)據(jù)庫(kù)服務(wù)。

zCloud在實(shí)現(xiàn)數(shù)據(jù)庫(kù)資源云化的基礎(chǔ)上,通過(guò)標(biāo)準(zhǔn)化、自動(dòng)化、智能化實(shí)現(xiàn)數(shù)據(jù)庫(kù)的自動(dòng)化和智能化運(yùn)維,減少大型企業(yè)中數(shù)據(jù)庫(kù)維護(hù)人員的日常運(yùn)維工作,讓數(shù)據(jù)庫(kù)運(yùn)維人員減少被動(dòng)性救火工作,增強(qiáng)數(shù)據(jù)庫(kù)運(yùn)行的穩(wěn)定性以及提高性能,以達(dá)到數(shù)據(jù)庫(kù)云平臺(tái)對(duì)數(shù)據(jù)庫(kù)服務(wù)的SLA要求。

zCloud目前已經(jīng)在金融、運(yùn)營(yíng)商、政府等多個(gè)領(lǐng)域有了最佳實(shí)踐案例,幫助組織構(gòu)建平穩(wěn)、高效的數(shù)據(jù)庫(kù)管理平臺(tái)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI