欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:網(wǎng)絡 運維 Nginx

柚子快報激活碼778899分享:網(wǎng)絡 運維 Nginx

http://yzkb.51969.com/

什么是nginx?

是一個高性能的負載均衡服務器,處理并發(fā)能力強、效率高內(nèi)存消耗小:開啟10nginx服務才占150M內(nèi)存。運行時間長:即使運行數(shù)月也不需要重新啟動,還能在不間斷服務的情況下進行軟件版本的升級

nginx模塊講解

nginx主要分為三個模塊:全局塊、events塊、http塊。 其中http塊又由server塊、location塊、upstream塊組成

# 全局塊:定義影響全局的配置,如用戶、worker進程數(shù)量、錯誤日志等

user www-data;

worker_processes auto;

pid /run/nginx.pid;

include /etc/nginx/modules-enabled/*.conf;

events {

worker_connections 768; # 每個worker進程的最大連接數(shù)

}

http {

# http塊:定義HTTP服務器的配置,如mime類型、日志、壓縮等

include /etc/nginx/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 /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/conf.d/*.conf;

include /etc/nginx/sites-enabled/*;

# server塊:定義虛擬主機的配置,每個server塊代表一個虛擬主機

server {

listen 80; # 監(jiān)聽端口

server_name example.com; # 服務器域名

# location塊:定義URL匹配的處理規(guī)則

location / {

root /var/www/html; # 根目錄

index index.html index.htm; # 默認文件

}

location /images/ {

root /var/www/data; # 指定目錄

}

# 配置反向代理

location /proxy/ {

proxy_pass http://backend_servers; # 轉發(fā)到后端服務器池

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

# 定義后端服務器池

upstream backend_servers {

server backend1.example.com;

server backend2.example.com;

server backend3.example.com;

}

}

全局塊

主要定義一些全局屬性。如worker進程數(shù)、日志等全局屬性

user www-data; # 定義運行NGINX進程的用戶

worker_processes auto; # 自動檢測并設置worker進程數(shù)

pid /run/nginx.pid; # 定義存儲進程ID文件的位置

include /etc/nginx/modules-enabled/*.conf; # 包含額外的模塊配置

events塊

主要定義nginx的worker進程的最大連接數(shù)

events {

worker_connections 768; # 每個worker進程的最大連接數(shù)

}

http塊

定義所有與http服務(服務/應用)的相關配置;如連接超時時間。可以包含多個server塊,每個server代表一個服務

http {

include /etc/nginx/mime.types; # 包含mime類型定義

default_type application/octet-stream; # 默認的mime類型

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傳輸效率

tcp_nodelay on; # 減少TCP延遲

keepalive_timeout 65; # 連接保持的超時時間

types_hash_max_size 2048; # 提高mime類型的哈希表大小

include /etc/nginx/conf.d/*.conf; # 包含額外的配置文件

include /etc/nginx/sites-enabled/*; # 包含虛擬主機配置文件

server塊

定于一個服務的相關配置。一個server塊包含多個location塊。每個location定義特定URL的處理規(guī)則。

server {

listen 80; # 監(jiān)聽80端口

server_name example.com; # 定義虛擬主機的域名

location / {

root /var/www/html; # 定義根目錄

index index.html index.htm; # 默認文件

}

location /images/ {

root /var/www/data; # 定義/images/路徑的目錄

}

location /proxy/ {

proxy_pass http://backend_servers; # 配置反向代理

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

upstream塊

定義和管理后端服務器,用于負載均衡和反向代理

upstream backend_servers {

server backend1.example.com; # 定義后端服務器1

server backend2.example.com; # 定義后端服務器2

server backend3.example.com; # 定義后端服務器3

}

}

worker進程

nginx采用的是多進程架構;主要由一個主進程(master process)和多個worker進程組成,每個worker進程互相隔離,單獨處理請求。

主進程

負責管理(啟動、停止)所有worker進程,同時將請求路由分發(fā)給worker進程讀取和驗證配置文件處理系統(tǒng)相關級別工作(如重載配置,重啟服務)

worker進程

各個worker進程相互隔離,獨立處理客戶端請求。每個woker進程只有一個線程來進行工作。采用異步、非阻塞的事件驅動模型來處理連接和請求

流程:

啟動:nginx啟動時,主進程加載全局配置信息,并啟動對應數(shù)量的worker進程請求處理:客戶端請求到達時,主進程將請求分發(fā)worker進程,worker根據(jù)連接請求轉發(fā)到目標服務中。

示例配置解釋

# 全局塊

user www-data; # 定義運行NGINX進程的用戶

worker_processes auto; # 自動設置worker進程數(shù)量,通常設置為CPU核心數(shù)

pid /run/nginx.pid; # 定義存儲主進程ID文件的位置

events {

worker_connections 768; # 每個worker進程的最大連接數(shù)

}

連接:表示TCP或者websocket連接(nginx支持websocket)。連接的超時時間在http塊中定義

http {

# 全局配置

keepalive_timeout 65; # 保持連接的超時時間為65秒

keepalive_requests 100; # 每個連接最多處理100個請求

}

異步非阻塞事件處理機制

為什么都說nginx的性能高,其實nginx內(nèi)部是采用多進程架構+異步非阻塞事件處理機制。 線程一直持續(xù)工作,減少了大量的CPU上下文切換。

異步非阻塞事件處理機制:

線程是進程的執(zhí)行單元,線程獲取CPU使用權就會執(zhí)行任務(代碼)。但是線程在執(zhí)行過程因為某些情況會放棄CPU使用權,進入阻塞狀態(tài)。

示例1 線程執(zhí)行I/O(網(wǎng)絡I/O)任務時,線程會阻塞放棄CPU使用權,并等待I/O任務完成,重新等待CPU調(diào)用。示例2 線程獲取鎖資源時,會進行阻塞放棄CPU使用權,直到當前線程獲取鎖后,再次等待CPU調(diào)度。

這兩個實例中,線程在執(zhí)行過程中都會阻塞,會偷懶,不再往后執(zhí)行相關代碼,直到阻塞消失(I/O完成,獲取到鎖)。在這種情況下 線程執(zhí)行任務會非常慢。 那有沒有一種辦法 讓線程一直工作不讓線程阻塞(偷懶)。這種辦法就叫做 異步非阻塞事件處理機制

假設當前有多個請求進入到同一個worker進程中。 異步非阻塞:當?shù)谝粋€請求被處理時,線程不會一直等待該請求結果,而是直接處理其它請求,當?shù)谝粋€請求完成接收到結果后,線程再來處理該請求。這樣可以更好地利用系統(tǒng)資源,提高處理效率。

詳細步驟:

當有多個請求同時發(fā)送時,nginx的主進程會將請求分發(fā)不同worker進程或者是同一個worker進程進行處理worker進程都有一個循環(huán)監(jiān)聽事件,一個單獨的線程,線程請求發(fā)送給目標服務,就會立馬處理其它請求當目標服務處理完成請求后,會響應給nginx(具體worker進程),循環(huán)監(jiān)聽事件監(jiān)聽到了響應,就會告知線程處理響應。這樣就會提高線程的執(zhí)行效率.根據(jù)相關配置,關閉連接。

總結:請求會分發(fā)給多個worker進程,實際上同一時間還是有多個線程處理請求(并發(fā)處理請求)。只不過這些線程來自不同的進程,又因為線程不會休息,新的請求進來時很快就被處理,執(zhí)行效率快,所以并發(fā)能力也會提高。

參考鏈接:太詳細了!Java語言異步非阻塞模式(原理篇)

nginx監(jiān)聽規(guī)則

在server模塊經(jīng)常能看到這個屬性:listen、server_name

server {

listen 80; # NGINX監(jiān)聽80端口

server_name example.com;

location /image/{

root /home/image/;

expires 30d;

}

# 定義所有請求的處理規(guī)則

location / {

# 將請求轉發(fā)到目標網(wǎng)站

proxy_pass http://testServer.com:8848;

# 設置代理請求的頭部信息

# 將請求的Host頭部信息設置為客戶端請求中的Host

proxy_set_header Host $host;

# 將客戶端的IP地址傳遞給目標服務器

proxy_set_header X-Real-IP $remote_addr;

# 將客戶端的真實IP地址包含在請求的X-Forwarded-For頭部中

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

listen:表示監(jiān)聽的端口,通常為nginx所在服務器的端口 server_name:表示監(jiān)聽的IP/域名,通常為nginx所在服務器

在我們前端應用中,通常是指定具體的后端服務器IP進行交互,如testServer.com:8848/list。 但是部署到nginx后,項目是不需要指定后端服務器,nginx根據(jù)url會自動將請求路由到后端服務器。如下:

發(fā)送請求 example.com:80/image/xx.jpg 。就會從nginx所在服務器的/home/image/ 目錄下找 發(fā)送請求 example.com:80/list;就會轉發(fā)給testServer.com服務器。url就變成了testServer.com:8848/list

正向代理

代理對象是 客戶端 ;當客戶端想要訪問某一網(wǎng)站(服務器)時,nginx就會代理客戶端去發(fā)送請求,同時隱藏客戶端IP地址。 流程:

發(fā)送請求要目標網(wǎng)站(服務器)時,nginx會攔截請求并生成代理服務器,由它去與目標網(wǎng)站進行交互代理服務器將請求發(fā)送給目標網(wǎng)站目標網(wǎng)站返回響應給代理服務器代理服務器返回給客戶端 在服務器角度,與我交互的是代理服務器,所以我并不知道客戶端的IP地址

示例:客戶端通過監(jiān)聽端口發(fā)送請求到 example.com 網(wǎng)站,就會生成代理服務器與服務器進行交互,同時可以選擇是否隱藏真實IP地址。

# 定義代理服務器監(jiān)聽的端口

server {

listen 8080;

# 定義所有請求的處理規(guī)則

location / {

# 將請求轉發(fā)到目標網(wǎng)站

proxy_pass http://example.com;

# 設置代理請求的頭部信息

# 將請求的Host頭部信息設置為客戶端請求中的Host

proxy_set_header Host $host;

# 將客戶端的IP地址傳遞給目標服務器

proxy_set_header X-Real-IP $remote_addr;

# 將客戶端的真實IP地址包含在請求的X-Forwarded-For頭部中

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

反向代理

代理對象是 服務器;一個大的網(wǎng)站,通常會有多個服務器來處理請求,保證服務的高可用性。nginx就代理這些服務器,當檢測到有請求要進入到網(wǎng)站時,就會為網(wǎng)站生成一個代理服務器,并根據(jù)負載均衡策略決定將請求路由到哪個服務器中。

流程:

客戶端發(fā)送請求給目標網(wǎng)站,nginx會生成代理服務器nginx根據(jù)負載均衡策略,決定將請求路由到具體服務器中。同時隱藏真實服務器IP服務器處理請求并將響應結果返回給代理服務器。代理服務器將響應結果放回給客戶端。 在客戶端角度,與我交互的是代理服務器,我并不知道請求路由到哪個具體的服務器(IP)中

示例: 一個大型網(wǎng)站有很多后端服務器處理用戶請求,通過反向代理服務器分發(fā)請求以提高性能和安全性

# 定義代理服務器監(jiān)聽的端口

server {

listen 80;

# 定義所有請求的處理規(guī)則

location / {

# 將請求轉發(fā)到后端服務器池

proxy_pass http://backend_servers;

# 設置代理請求的頭部信息

# 將請求的Host頭部信息設置為客戶端請求中的Host

proxy_set_header Host $host;

# 將客戶端的IP地址傳遞給后端服務器

proxy_set_header X-Real-IP $remote_addr;

# 將客戶端的真實IP地址包含在請求的X-Forwarded-For頭部中

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

# 定義后端服務器池

upstream backend_servers {

# 定義多個后端服務器

server backend1.example.com;

server backend2.example.com;

server backend3.example.com;

}

反向代理通常會使用 upstream 指令來定義和管理后端服務器。 其實在上方反向代理示例中,也有使用正向代理來代理客戶端。

正向、反向代理區(qū)別:從nginx配置文件中來看就是是否使用了 upstream 指令

nginx解決跨域

nginx采用CORS策略來跨域。

server {

listen 80;

server_name example.com;

location / {

# 允許所有來源的跨域請求

add_header Access-Control-Allow-Origin *;

# 允許指定的請求方法

add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, HEAD";

# 允許攜帶認證信息

add_header Access-Control-Allow-Credentials true;

# 允許指定的請求頭字段

add_header Access-Control-Allow-Headers "Authorization, Origin, X-Requested-With, Content-Type, Accept";

# 設置預檢請求的有效期

add_header Access-Control-Max-Age 3600;

# 配置處理請求的指令

}

}

負載均衡

輪詢

每個客戶端的請求有序的轉發(fā)到不同的服務器中,默認是輪詢

權重論詢

就如某一個服務器比其他服務器更好,我就讓客戶端的請求多轉發(fā)到這個服務器中,weight代表權重

在nginx.conf中的配置: 第一步:在http全局塊添加負載均衡的服務器列表 第二步:在server塊中的location中設置它的映射規(guī)則 想要加權重,可在服務器列表中加weight server 192.168.17.129:8080 weight=5; server 192.168.17.129:8081 weight=10; 這樣8080的服務器處理的量就多一倍

最小連接

下一個連接會被路由到連接數(shù)最小的服務器中

IP哈希

每個請求按訪問IP的hash結果進行路由,這樣每個客戶端固定一個后端服務器。 實際中,不考慮使用該方法

動靜分離

簡單來說就是把動態(tài)資源(請求)跟靜態(tài)資源(圖片)分開,分別部署到不同服務器中。

好處:靜態(tài)資源由nginx處理,減少了后端服務器的負載,提高了響應速度。同時后端服務器只需要處理動態(tài)請求即可。

示例:靜態(tài)資源部署到nginx所在服務器中 url為/image/xx.jpg時就會從/var/www/image/目錄下獲取

server {

listen 80;

server_name example.com;

# 處理靜態(tài)文件

location /image/ {

root /var/www/image/;

expires 30d;

}

# 處理動態(tài)請求

location / {

proxy_pass http://backend_server;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

}

}

upstream backend_server {

server 127.0.0.1:8080; # 后端服務器地址

}

為什么說nginx處理靜態(tài)資源就快,而處理動態(tài)快呢

這是項目的靜態(tài)資源都部署在nginx所在的服務器上,所以nginx讀取靜態(tài)資源就非常快。 而處理動態(tài)資源,需要解析請求,將請求轉發(fā)到目標服務器。同時涉及到負載均衡策略等問題。目標服務器返回響應給nginx時還要將響應數(shù)據(jù)返回給客戶端。這一過程非常的繁瑣,所消耗的資源也比處理靜態(tài)資源時多。

限流規(guī)則

基于連接數(shù)限流基于每秒的請求數(shù)限流

注:nginx的限流是作用在目標服務器,而不是nginx服務本身。

基于連接數(shù)限流

說明:某個客戶端IP與nginx發(fā)起的連接數(shù)超過了閾值,那么超出的連接將會被nginx拒絕。防止某個客戶端ip地址與nginx的連接數(shù)過載。

http {

# 定義連接限制的共享內(nèi)存區(qū)域,10m是內(nèi)存大小

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {

listen 80;

server_name example.com;

# 限制每個 IP 地址最多允許 10 個連接

limit_conn addr 10;

location / {

# 配置處理請求的指令

}

}

}

使用 limit_conn_zone 指令定義了一個共享內(nèi)存區(qū)域,用于存儲連接限制的狀態(tài)信息。$binary_remote_addr 是一個 NGINX 變量,表示客戶端的 IP 地址,zone=addr:10m 指定了共享內(nèi)存區(qū)域的名稱為 addr,大小為 10MB。

每個客戶端與nginx進行交互,都會進行一個TCP連接,后續(xù)的請求都會復用這個連接,連接過了超時時間后就會銷毀。

連接超時時間設置:

http {

keepalive_timeout 30s; # 設置連接超時時間為 30 秒

server {

listen 80;

server_name example.com;

location / {

# 配置處理請求的指令

}

}

}

基于每秒的請求數(shù)限流

說明:每秒最多處理多少個請求

http {

# 定義請求速率限制的共享內(nèi)存區(qū)域,10m是內(nèi)存大小,rate=10r/s表示每秒允許的請求速率

limit_req_zone $binary_remote_addr zone=req_zone:10m rate=10r/s;

server {

listen 80;

server_name example.com;

# 每秒最多允許 10 個請求,突發(fā)量不超過 20 個,10-20之間的請求會延遲處理,超過20的請求會直接拒絕。

limit_req zone=req_zone burst=20 nodelay;

location / {

# 配置處理請求的指令

}

}

}

nginx的基于請求數(shù)量限流是根據(jù)令牌桶算法實現(xiàn)的。 參考文章:限流:計數(shù)器、漏桶、令牌桶 三大算法的原理與實戰(zhàn)(史上最全)

高可用主備模式

我們是無法確定一個軟件是一直運行下去的,所有當nginx壞了的時候,我們需要設置另外一個nginx來完善工作,這里需要下載keepalived來管理nginx,當keppalived檢測到主nginx壞了,就會啟用備用nginx

參考鏈接:Nginx配置參數(shù)詳解

全文參考連接: Nginx面試題(總結最全面的面試題?。。。?/p>

柚子快報激活碼778899分享:網(wǎng)絡 運維 Nginx

http://yzkb.51969.com/

精彩文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉載請注明,如有侵權,聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19185755.html

發(fā)布評論

您暫未設置收款碼

請在主題配置——文章設置里上傳

掃描二維碼手機訪問

文章目錄