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?{
location?/?{
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?一起使用,
server?{
location?/?{
limit_req?zone=myLimit?burst=20?nodelay;
rewrite?/? http://fhadmin.cn?permanent;
}
}
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;
server?{
...
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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/390238.html
標籤:其他
上一篇:如何從地圖類創建字典?
