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