天天看點

Nginx 如何工作 負載均衡政策有哪些 如何限流

3、所有 worker 程序的 listenfd 會在新連接配接到來時變得可讀 ,為保證隻有一個程序處理該連接配接,所有 worker 程序在注冊 listenfd 讀事件前搶占 accept_mutex ,搶到互斥鎖的那個程序注冊 listenfd 讀事件 ,在讀事件裡調用 accept 接受該連接配接。

4、當一個 worker 程序在 accept 這個連接配接之後,就開始讀取請求、解析請求、處理請求,産生資料後,再傳回給用戶端 ,最後才斷開連接配接。

5、Nginx 常用指令有哪些(java項目fhadmin.cn)?

啟動 nginx 。

停止 nginx -s stop 或 nginx -s quit 。

重新開機 nginx -s reload 或 service nginx reload 。

重載指定配置檔案 .nginx -c /usr/local/nginx/conf/nginx.conf 。

檢視 nginx 版本 nginx -v 。

6、nginx中500、502、503、504 有什麼差別?

500:

Internal Server Error 内部服務錯誤,比如腳本錯誤,程式設計語言文法錯誤。

502:

Bad Gateway錯誤,網關錯誤。比如伺服器目前連接配接太多,響應太慢,頁面素材太多、帶寬慢。

503:

Service Temporarily Unavailable,服務不可用,web伺服器不能處理HTTP請求,可能是臨時超載或者是伺服器進行停機維護。

504:

Gateway timeout 網關逾時,程式執行時間過長導緻響應逾時,例如程式需要執行20秒,而nginx最大響應等待時間為10秒,這樣就會出現逾時。

7、Nginx 壓縮了解嗎,如何開啟壓縮?

開啟nginx gzip壓縮後,圖檔、css、js等靜态資源的大小會減小,可節省帶寬,提高傳輸效率,但是會消耗CPU資源。

開啟:

#?開啟gzip

gzip?off;

#?啟用gzip壓縮的最小檔案,小于設定值的檔案将不會壓縮

gzip_min_length?1k;

#?gzip?壓縮級别,1-9,數字越大壓縮的越好,也越占用CPU時間,後面會有詳細說明

gzip_comp_level?1;

#?進行壓縮的檔案類型。javascript有多種形式。其中的值可以在 mime.types 檔案中找到。

gzip_types?text/plain?application/javascript?application/x-javascript?text/css?application/xml?text/javascript?application/x-httpd-php?image/jpeg?image/gif?image/png?application/vnd.ms-fontobject?font/ttf?font/opentype?font/x-woff?image/svg+xml;

8、Nginx 和 Apache、Tomcat 之間的不同點

1、Nginx/Apache 是Web Server,而Apache Tomact是一個servlet container

2、tomcat可以對jsp進行解析,nginx和apache隻是web伺服器,可以簡單了解為隻能提供html靜态檔案服務。

Nginx和Apache差別(java項目fhadmin.cn):

1)Nginx輕量級,同樣起web 服務,比apache占用更少的記憶體及資源 。

2)Nginx 抗并發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高并發下nginx 能保持低資源低消耗高性能 。

3)Nginx提供負載均衡,可以做做反向代理,前端伺服器

4)Nginx多程序單線程,異步非阻塞;Apache多程序同步,阻塞。

9、Nginx 有哪些負載均衡政策

Nginx 預設提供的負載均衡政策:

1、輪詢(預設)round_robin

每個請求按時間順序逐一配置設定到不同的後端伺服器,如果後端伺服器 down 掉,能自動剔除。

2、IP 哈希 ip_hash

每個請求按通路 ip 的 hash 結果配置設定,這樣每個訪客固定通路一個後端伺服器,可以解決 session 共享的問題。

當然,實際場景下,一般不考慮使用 ip_hash 解決 session 共享。

3、最少連接配接 least_conn

下一個請求将被分派到活動連接配接數量最少的伺服器

4、權重 weight

weight的值越大配置設定到的通路機率越高,主要用于後端每台伺服器性能不均衡的情況下,達到合理的資源使用率。

還可以通過插件支援其他政策。

10、Nginx動靜态資源分離做過嗎,為什麼要這樣做?

動态資源、靜态資源分離,是讓動态網站裡的動态網頁根據一定規則把不變的資源和經常變的資源區分開來 路。

比如說 js、css、hrml從A伺服器傳回。圖檔 從B伺服器傳回,其他請求從Tomcat伺服器C傳回。

背景應用分開部署,提高使用者通路靜态代碼的速度。而且現在還有CDN服務,不需要限制于伺服器的帶寬。

11、ngx_http_upstream_module子產品了解嗎?

ngx_http_upstream_module子產品用于将多個伺服器定義成伺服器組,可通過fastcgi傳遞、proxy傳遞、uwsgi傳遞、memcached傳遞和scgi傳遞指令來引用的伺服器組。

比如通路www.a.com 緩存+排程:

http{

proxy_cache_path?/var/cache/nginx/proxy_cache?levels=1:2:2?keys_zone=proxycache:20m?inactive=120s?max_si?#緩存

ze=1g;

upstream?mysqlsrvs{

ip_hash;?#源位址hash排程方法?寫了backup就不可用

server?172.18.99.1:80?weight=2;?#weight權重

server?172.18.99.2:80;??????????#标記down,配合ip_hash使用,實作灰階釋出

server?172.18.99.3:80?backup;???#backup将伺服器标記為“備用”,即所有伺服器均不可用時才啟用?

}

server{

server_name?www.a.com;

proxy_cache?proxycache;

proxy_cache_key?$request_uri;

proxy_cache_valid?200?302?301?1h;

proxy_cache_valid?any?1m;

location?/?{

proxy_pass? http://mysqlsrvs;

12、限流了解嗎,怎麼限流的?

Nginx 提供兩種限流方式,一是控制速率,二是控制并發連接配接數。

1、控制速率

ngx_http_limit_req_module?子產品提供了漏桶算法(leaky bucket),可以限制單個IP的請求處理頻率。

如:

1.1 正常限流:

http?{

limit_req_zone?192.168.1.1?zone=myLimit:10m?rate=5r/s;

server?{

limit_req?zone=myLimit;

rewrite?/? 

http://fhadmin.cn?permanent;

參數解釋:

key:?定義需要限流的對象。

zone:?定義共享記憶體區來存儲通路資訊。

rate:?用于設定最大通路速率。

表示基于用戶端192.168.1.1進行限流,定義了一個大小為10M,名稱為myLimit的記憶體區,用于存儲IP位址通路資訊。

rate設定IP通路頻率,rate=5r/s表示每秒隻能處理每個IP位址的5個請求。

Nginx限流是按照毫秒級為機關的,也就是說1秒處理5個請求會變成每200ms隻處理一個請求。如果200ms内已經處理完1個請求,但是還是有有新的請求到達,這時候Nginx就會拒絕處理該請求。

1.2 突發流量限制通路頻率

上面rate設定了?5r/s,如果有時候流量突然變大,超出的請求就被拒絕傳回503了,突發的流量影響業務就不好了。

這時候可以加上burst?參數,一般再結合?nodelay?一起使用。

limit_req?zone=myLimit?burst=20?nodelay;

burst=20 nodelay?表示這20個請求立馬處理,不能延遲,相當于特事特辦。不過,即使這20個突發請求立馬處理結束,後續來了請求也不會立馬處理。

burst=20?相當于緩存隊列中占了20個坑,即使請求被處理了,這20個位置也隻能按100ms一個來釋放。

2、控制并發連接配接數

ngx_http_limit_conn_module?提供了限制連接配接數功能。

limit_conn_zone?$binary_remote_addr?zone=perip:10m;

limit_conn_zone?$server_name?zone=perserver:10m;

...

limit_conn?perip?10;

limit_conn?perserver?100;

limit_conn perip 10?作用的key 是?$binary_remote_addr,表示限制單個IP同時最多能持有10個連接配接。

limit_conn perserver 100?作用的key是?$server_name,表示虛拟主機(server) 同時能處理并發連接配接的總數。

注:limit_conn perserver 100?作用的key是?$server_name,表示虛拟主機(server) 同時能處理并發連接配接的總數。

拓展:

如果不想做限流,還可以設定白名單:

利用 Nginx?ngx_http_geo_module?和?ngx_http_map_module?兩個工具子產品提供的功能。

##定義白名單ip清單變量

geo?$limit?{

default?1;

10.0.0.0/8?0;

192.168.0.0/10?0;

81.56.0.35?0;