柚子快報(bào)激活碼778899分享:運(yùn)維 什么是Nginx?
柚子快報(bào)激活碼778899分享:運(yùn)維 什么是Nginx?
1.Nginx概述
1.1.Nginx是什么?
Nginx是一個(gè)高性能的http和反向代理服務(wù)器,其特點(diǎn)是占用內(nèi)存小,并發(fā)能力強(qiáng)。Nginx專為性能優(yōu)化而開(kāi)發(fā),性能是其最重要的考量,能經(jīng)受高負(fù)載的考驗(yàn),有報(bào)告表明能支持高達(dá)50000個(gè)并發(fā)連接數(shù)。 Nginx 是開(kāi)源、高性能、高可靠的 Web 和反向代理服務(wù)器,而且支持熱部署,幾乎可以做到 7 * 24 小時(shí)不間斷運(yùn)行,即使運(yùn)行幾個(gè)月也不需要重新啟動(dòng),還能在不間斷服務(wù)的情況下對(duì)軟件版本進(jìn)行熱更新。性能是 Nginx 最重要的考量,其占用內(nèi)存少、并發(fā)能力強(qiáng)、能支持高達(dá) 5w 個(gè)并發(fā)連接數(shù),最重要的是,Nginx 是免費(fèi)的并可以商業(yè)化,配置使用也比較簡(jiǎn)單。 Nginx 的最重要的幾個(gè)使用場(chǎng)景:
靜態(tài)資源服務(wù),通過(guò)本地文件系統(tǒng)提供服務(wù);反向代理服務(wù),延伸出包括緩存、負(fù)載均衡等;API 服務(wù),OpenResty
1.2.Nginx重點(diǎn)
反向代理負(fù)載均衡nginx特點(diǎn)
學(xué)習(xí)Nginx的重點(diǎn)就理解什么是反向代理、負(fù)載均衡還有他的一些特點(diǎn)。
2.Nginx的相關(guān)功能
2.1.反向代理
這里說(shuō)到反向代理,我們一定想知道什么是正向代理? 我們可以先來(lái)連接什么是正向代理。 代理是在服務(wù)器和客戶端之間假設(shè)的一層服務(wù)器,代理將接收客戶端的請(qǐng)求并將它轉(zhuǎn)發(fā)給服務(wù)器,然后將服務(wù)端的響應(yīng)轉(zhuǎn)發(fā)給客戶端。 不管是正向代理還是反向代理,實(shí)現(xiàn)的都是上面的功能。如果你對(duì)OSI 七層模型與 TCP/IP 四層模型不是很熟悉可以再回顧下。 正向代理一般是客戶端架設(shè)的 ,比如在自己的機(jī)器上安裝一個(gè)代理軟件。而反向代理一般是服務(wù)器架設(shè)的 ,比如在自己的機(jī)器集群中部署一個(gè)反向代理服務(wù)器。 正向代理類(lèi)似一個(gè)跳板機(jī),代理訪問(wèn)外部資源,相當(dāng)我們經(jīng)常說(shuō)的代理IP去爬。 比如我們國(guó)內(nèi)訪問(wèn)谷歌,直接訪問(wèn)訪問(wèn)不到,我們可以通過(guò)一個(gè)正向代理服務(wù)器,請(qǐng)求發(fā)到代理服,代理服務(wù)器能夠訪問(wèn)谷歌,這樣由代理去谷歌取到返回?cái)?shù)據(jù),再返回給我們,這樣我們就能訪問(wèn)谷歌了,面向客戶端的。
正向代理的用途:
訪問(wèn)原來(lái)無(wú)法訪問(wèn)的資源,如google可以做緩存,加速訪問(wèn)資源對(duì)客戶端訪問(wèn)授權(quán),上網(wǎng)進(jìn)行認(rèn)證代理可以記錄用戶訪問(wèn)記錄(上網(wǎng)行為管理),對(duì)外隱藏用戶信息
反向代理 了解了正向代理,下面理解反向代理會(huì)相對(duì)比較簡(jiǎn)單了,就是代理服務(wù)器來(lái)接受Internet上的請(qǐng)求,然后發(fā)送給內(nèi)部網(wǎng)路的服務(wù)器上,在將結(jié)果返回給客戶,相當(dāng)于一層服務(wù)器來(lái)對(duì)外開(kāi)放。 反向代理是面向內(nèi)部服務(wù)器的。 反向代理(Reverse Proxy)方式是指以代理服務(wù)器來(lái)接受 internet 上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給 internet 上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)反向代理服務(wù)器。 反向代理是為服務(wù)端服務(wù)的,反向代理可以幫助服務(wù)器接收來(lái)自客戶端的請(qǐng)求,幫助服務(wù)器做請(qǐng)求轉(zhuǎn)發(fā),負(fù)載均衡等。 反向代理對(duì)服務(wù)端是透明的,對(duì)我們是非透明的,即我們并不知道自己訪問(wèn)的是代理服務(wù)器,而服務(wù)器知道反向代理在為他服務(wù)。 反向代理的作用:
保證內(nèi)網(wǎng)的安全,阻止web攻擊,大型網(wǎng)站,通常將反向代理作為公網(wǎng)訪問(wèn)地址,Web服務(wù)器是內(nèi)網(wǎng)負(fù)載均衡,通過(guò)反向代理服務(wù)器來(lái)優(yōu)化網(wǎng)站的負(fù)載
2.2.負(fù)載均衡
如果請(qǐng)求數(shù)過(guò)大,單個(gè)服務(wù)器解決不了,我們?cè)黾臃?wù)器的數(shù)量,然后將請(qǐng)求分發(fā)到各個(gè)服務(wù)器上,將原先請(qǐng)求集中到單個(gè)服務(wù)器的情況改為請(qǐng)求分發(fā)到多個(gè)服務(wù)器上,就是負(fù)載均衡。 Upstream 指定后端服務(wù)器地址列表,在 server 中攔截響應(yīng)請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)到 Upstream 中配置的服務(wù)器列表。
upstream balanceServer {
server 10.1.22.33:12345;
server 10.1.22.34:12345;
server 10.1.22.35:12345;
}
server {
server_name fe.server.com;
listen 80;
location /api {
proxy_pass http://balanceServer;
}
}
上面的配置只是指定了 nginx 需要轉(zhuǎn)發(fā)的服務(wù)端列表,并沒(méi)有指定分配策略。 默認(rèn)情況下采用的是輪詢策略,將所有客戶端請(qǐng)求輪詢分配給服務(wù)端。這種策略是可以正常工作的,但是如果其中某一臺(tái)服務(wù)器壓力太大,出現(xiàn)延遲,會(huì)影響所有分配在這臺(tái)服務(wù)器下的用戶。 Nginx支持的負(fù)載均衡調(diào)度算法方式如下:
weight輪詢(默認(rèn),常用):接收到的請(qǐng)求按照權(quán)重分配到不同的后端服務(wù)器,即使在使用過(guò)程中,某一臺(tái)后端服務(wù)器宕機(jī),Nginx會(huì)自動(dòng)將該服務(wù)器剔除出隊(duì)列,請(qǐng)求受理情況不會(huì)受到任何影響。這種方式下,可以給不同的后端服務(wù)器設(shè)置一個(gè)權(quán)重值(weight),用于調(diào)整不同的服務(wù)器上請(qǐng)求的分配率;權(quán)重?cái)?shù)據(jù)越大,被分配到請(qǐng)求的幾率越大;該權(quán)重值,主要是針對(duì)實(shí)際工作環(huán)境中不同的后端服務(wù)器硬件配置進(jìn)行調(diào)整的。ip_hash(常用):每個(gè)請(qǐng)求按照發(fā)起客戶端的ip的hash結(jié)果進(jìn)行匹配,這樣的算法下一個(gè)固定ip地址的客戶端總會(huì)訪問(wèn)到同一個(gè)后端服務(wù)器,這也在一定程度上解決了集群部署環(huán)境下session共享的問(wèn)題。fair:智能調(diào)整調(diào)度算法,動(dòng)態(tài)的根據(jù)后端服務(wù)器的請(qǐng)求處理到響應(yīng)的時(shí)間進(jìn)行均衡分配,響應(yīng)時(shí)間短處理效率高的服務(wù)器分配到請(qǐng)求的概率高,響應(yīng)時(shí)間長(zhǎng)處理效率低的服務(wù)器分配到的請(qǐng)求少;結(jié)合了前兩者的優(yōu)點(diǎn)的一種調(diào)度算法。但是需要注意的是Nginx默認(rèn)不支持fair算法,如果要使用這種調(diào)度算法,請(qǐng)安裝upstream_fair模塊。url_hash:按照訪問(wèn)的url的hash結(jié)果分配請(qǐng)求,每個(gè)請(qǐng)求的url會(huì)指向后端固定的某個(gè)服務(wù)器,可以在Nginx作為靜態(tài)服務(wù)器的情況下提高緩存效率。同樣要注意Nginx默認(rèn)不支持這種調(diào)度算法,要使用的話需要安裝Nginx的hash軟件包。
2.3.動(dòng)靜分離
為了加快網(wǎng)站的解析速度,可以把動(dòng)態(tài)頁(yè)面和靜態(tài)頁(yè)面由不同的服務(wù)器來(lái)解析,加快解析速度,降低原來(lái)單個(gè)服務(wù)器的壓力。 將靜態(tài)資源部署在Nginx服務(wù)器上面請(qǐng)求的是靜態(tài)資源直接Nginx返回?cái)?shù)據(jù)。實(shí)現(xiàn)動(dòng)靜分離。 一般來(lái)說(shuō),都需要將動(dòng)態(tài)資源和靜態(tài)資源分開(kāi),由于 Nginx 的高并發(fā)和靜態(tài)資源緩存等特性,經(jīng)常將靜態(tài)資源部署在 Nginx 上。如果請(qǐng)求的是靜態(tài)資源,直接到靜態(tài)資源目錄獲取資源,如果是動(dòng)態(tài)資源的請(qǐng)求,則利用反向代理的原理,把請(qǐng)求轉(zhuǎn)發(fā)給對(duì)應(yīng)后臺(tái)應(yīng)用去處理,從而實(shí)現(xiàn)動(dòng)靜分離。 使用前后端分離后,可以很大程度提升靜態(tài)資源的訪問(wèn)速度,即使動(dòng)態(tài)服務(wù)不可用,靜態(tài)資源的訪問(wèn)也不會(huì)受到影響。
3.Nginx配置
上面是對(duì)配置的框架分析
1、全局塊
該部分配置主要影響Nginx全局,通常包括下面幾個(gè)部分:
配置運(yùn)行Nginx服務(wù)器用戶(組)
worker process數(shù)
Nginx進(jìn)程PID存放路徑
錯(cuò)誤日志的存放路徑
配置文件的引入
2、events塊
該部分配置主要影響Nginx服務(wù)器與用戶的網(wǎng)絡(luò)連接,主要包括:
設(shè)置網(wǎng)絡(luò)連接的序列化
是否允許同時(shí)接收多個(gè)網(wǎng)絡(luò)連接
事件驅(qū)動(dòng)模型的選擇
最大連接數(shù)的配置
3、http塊
定義MIME-Type
自定義服務(wù)日志
允許sendfile方式傳輸文件
連接超時(shí)時(shí)間
單連接請(qǐng)求數(shù)上限
4、server塊
配置網(wǎng)絡(luò)監(jiān)聽(tīng)
基于名稱的虛擬主機(jī)配置
基于IP的虛擬主機(jī)配置
5、location塊
location配置
請(qǐng)求根目錄配置
更改location的URI
網(wǎng)站默認(rèn)首頁(yè)配置
一份配置清單例析
#下面這一塊是全局塊
user nobody nobody;
worker_processes 3;
error_log logs/error.log;
pid logs/nginx.pid;
#events塊
events {
use epoll;
worker_connections 1024;
}
#http塊
http {
include mime.types;
default_type application/octet-stream;
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 on;
keepalive_timeout 65;
#當(dāng)前nginx服務(wù)的一些配置
server {
# 當(dāng)前服務(wù)的監(jiān)聽(tīng)端口
listen 8088;
server_name codesheep;
access_log /codesheep/webserver/server1/log/access.log;
error_page 404 /404.html;
# 當(dāng)前uil下的跳轉(zhuǎn)root 、頁(yè)面
location /server1/location1 {
root /codesheep/webserver;
index index.server2-location1.htm;
}
# location 配置2
location /server1/location2 {
root /codesheep/webserver;
index index.server2-location2.htm;
}
}
# 第二個(gè)Nginx服務(wù)器
server {
listen 8089;
server_name 192.168.31.177;
access_log /codesheep/webserver/server2/log/access.log;
error_page 404 /404.html;
location /server2/location1 {
root /codesheep/webserver;
index index.server2-location1.htm;
}
location /srv2/loc2 {
alias /codesheep/webserver/server2/location2/;
index index.server2-location2.htm;
}
# 代理請(qǐng)求路徑
location /srv3/loc3 {
proxy_pass http://127.0.0.1:8080;
}
#代理請(qǐng)求路徑2
location /srv4/loc4/ {
proxy_pass http://127.0.0.1:8081;
}
location = /404.html {
root /codesheep/webserver/;
index 404.html;
}
}
}
柚子快報(bào)激活碼778899分享:運(yùn)維 什么是Nginx?
文章鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。