您好,登錄后才能下訂單哦!
原文:http://www.enmotech.com/web/detail/1/749/1.html (復制鏈接,打開瀏覽器即可查看)
導讀:Nginx是一個HTTP和反向代理服務,一個郵件代理服務,一個通用的TCP/UDP代理服務。Nginx可以提供HTTP、反向代理服務,郵件代理服務,通用的TCP/UDP代理服務。云和恩墨的zCloud數據庫云管平臺的微服務端使用Nginx提供HTTP服務,并使用nginx作為內部的反向代理解決自動化部署安裝過程中相關組件、文件依賴包下載的問題。
Nginx是什么
Nginx是一個HTTP和反向代理服務,一個郵件代理服務,一個通用的TCP/UDP代理服務。
Nginx基本功能
Nginx基本功能可以分為基本的HTTP服務、高級HTTP服務和郵寄服務三大類。
Nginx提供的基本HTTP服務,可以作為HTTP代理服務器和反向代理服務器,通過緩存加速訪問;通過FastCGI,uwsgi,SCGI等提供緩存,支持負載均衡和容災;支持SSL和TLS SNI協議等。
Nginx提供高級的HTTP服務,基于名稱和IP的虛擬服務器;基于IP、密碼、子請求的訪問控制;支持FLV和MP4媒體傳輸;嵌入perl語言等。
Nginx作為郵件代理服務器支持IMAP、POP3代理服務功能;通過外部HTTP身份驗證服務器進行用戶身份驗證,并將連接重定向到內部SMTP服務器。
我們為什么選擇Nginx?
為什么選擇Nginx,會必不可少地和Apache服務器做個比較,WEB服務器鼻祖Apache采用的是同步阻塞型的、多進程模型,一個連接對應一個進程,高并發下會消耗大量內存,進程間切換也會消耗大量CPU資源 ;Nginx 采用的是異步非阻塞工作模型,具備高并發、低資源消耗的特性,高度模塊化設計使 Nginx 具備很好的擴展性,在處理靜態文件、反向代理請求等方面,Nginx 表現出很大的優勢。
從netcraft網站最新統計情況可以看到Nginx份額逐漸在升高。已經逐漸接近Apache占用量。
Nginx優點
首先,Nginx支持高并發的同時資源消耗相比其他的服務器要低很多,據統計一般情況下10000個非活躍的HTTP連接在nginx中僅消耗2.5M內存,單機峰值能達到10W連接。
支持熱部署,Master管理進程和worker工作進程的分離設計,使得Nginx能夠提供熱部署功能。
高可靠性能各大網站選擇Nginx的基本條件,很多家高流量的網站核心服務器上都大規模使用Nginx。
BSD協議許可,不止允許免費使用,而且允許用戶在自己的項目中直接使用或修改nginx源代碼。
Nginx優點不止于此,期待各位的發掘。
安裝Nginx
獲取Nginx
可在http://nginx.org/en/download.html官方網站下載nginx各個版本。可以看到有主流版本(Mainline version),也可以說是開發版本,穩定版本(Stableversion)和過期版本(Legacy versions)。
編譯安裝Nginx
編譯Nginx源代碼,需要標準的gcc編譯器,還需要automake完成竄國家makefile的工作,依賴一些第三方庫,通常有pcre庫(支持rewrite模塊)、zlib庫(支持gzip模塊)、openssl庫(支持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腳本程序相關:
可以看下配置的幫助,每個參數后面都有英文解釋
[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進行源碼編譯
make
make install安裝Nginx
make install
編譯安裝完成之后啟動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具體命令參數
[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二進制可執行文件,nginx.conf配置文件,access.log訪問日志,error.log錯誤日志。
這里主要說下nginx.conf配置文件,Nginx和它的模塊工作方式由配置文件決定,配置文件默認名為nginx.conf ,放在/usr/local/nginx/conf, /etc/nginx,或者/usr/local/etc/nginx目錄下。
下面是Nginx初始化默認的一個配置文件
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 { } }...}
配置文件由指令和指令塊構成,每條指令以分號結尾,指令和參數間以空格分分隔,指令快以大括號{}將所多條指令組織到一起,include語句可以組合多個配置文件。使用#添加注釋,提高可隊形。使用$符號獲取變量。
下面我們看看nginx.conf各個指令塊的作用。
1)全局塊
全局塊是默認配置文件從開始到events塊之間的一部分,例如下面節選的部分默認配置文件。主要設置一些影響Nginx服務器整體運行的配置質量,通常包括運行的用戶,工作進程數,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塊設計指令主要是影響Nginx與用戶網絡連接,主要包括是否允許同時接收多個網絡連接,選擇哪個事件驅動模型處理請求,每個工作進程支持的最大連接數等。
3)http指令塊
Http指令塊是Nginx服務器配置中的重要部分。Http指令塊中可以包含自己的全局塊,也可以包含多個server指令塊,server指令塊又可以包含location指令塊。Http全局塊中可以定義MIME_TYPE,文件引入,自定義日志、連接超時時間、連接請求上限數量等。
4)server指令塊
Server指令塊可以包含多個location指令塊,最常見的配置是監聽端口配置和服務名稱或者IP地址。
5)location指令塊
Location指令塊可以對特定請求進行處理。地址的定向、數據緩存和應答控制都在這部分實現。
進程組成
Nginx后臺進程有一個主進程,和若干個工作進程。主進程的作用是讀取和評估配置,并維護工作進程。工作進程處理請求。Nginx依賴事件模型和依靠操作系統機制,有效地分發工作進程間的請求。工作進程數量配置在配置文件中,并且可以修改為給定的配置或者根據CPU核數動態調整進程數。
[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
可以看到實際運行進程工作進程和配置文件數量是一致的。
[root@lslt ~]# cat /etc/nginx/nginx.conf |grep workworker_processes 4;worker_connections 1024;
Nginx為什么采用管理進程和工作進程分開的模式呢?主要好處有以下兩點:
1)主進程不對用戶請求提供服務,只用于管理提供服務的工作進程,所以主進程可以是唯一的,可以啟停服務、重載配置文件、平滑升級程序等。主進程需要擁有較大的權限,工作進程的權限要小于或等于主進程,這樣主進程才可以完全地管理工作進程。當任意一個工作進程出現錯誤時,主進程可以啟動新的工作進程繼續服務。
2)多個工作進程可以提供健壯性,一個進程異常后,其他進程可以正常處理請求。更重要的是可以實現多核并發處理。通常推薦工作進程數量和CPU核數相等,這樣每個工作進程綁定到CPU核上,進程間切換代價最小。
關于 zCloud
云和恩墨zCloud數據庫云服務管理平臺,用于幫助客戶以更低成本、更快方式、更安全的策略,實現企業私有云或行業云的數據庫服務。
zCloud在實現數據庫資源云化的基礎上,通過標準化、自動化、智能化實現數據庫的自動化和智能化運維,減少大型企業中數據庫維護人員的日常運維工作,讓數據庫運維人員減少被動性救火工作,增強數據庫運行的穩定性以及提高性能,以達到數據庫云平臺對數據庫服務的SLA要求。
zCloud目前已經在金融、運營商、政府等多個領域有了最佳實踐案例,幫助組織構建平穩、高效的數據庫管理平臺。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。