鎖屏面試題百日百刷-nginx如何做到高可用
====Nginx負(fù)載均衡怎么實(shí)現(xiàn)的?策略有哪些?
為了避免服務(wù)器崩潰,大家會(huì)通過負(fù)載均衡的方式來分擔(dān)服務(wù)器壓力。將對(duì)臺(tái)服務(wù)器組成一個(gè)集群,當(dāng)用戶訪問時(shí),先訪問到一個(gè)轉(zhuǎn)發(fā)服務(wù)器,再由轉(zhuǎn)發(fā)服務(wù)器將訪問分發(fā)到壓力更小的服務(wù)器。
Nginx負(fù)載均衡實(shí)現(xiàn)的策略有以下五種:
1、輪詢(默認(rèn))
每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端某個(gè)服務(wù)器宕機(jī),能自動(dòng)剔除故障系統(tǒng)。
upstream backserver {
server 192.168.0.12;
server 192.168.0.13;
?}
2、權(quán)重 weight
weight的值越大分配到的訪問概率越高,主要用于后端每臺(tái)服務(wù)器性能不均衡的情況下。其次是為在主從的情況下設(shè)置不同的權(quán)值,達(dá)到合理有效的地利用主機(jī)資源。
upstream backserver {
server 192.168.0.12 weight=2;
server 192.168.0.13 weight=8;
}
3、ip_hash( IP綁定)
每個(gè)請(qǐng)求按訪問IP的哈希結(jié)果分配,使來自同一個(gè)IP的訪客固定訪問一臺(tái)后端服務(wù)器, 并且可以有效解決動(dòng)態(tài)網(wǎng)頁存在的session共享問題。
upstream backserver {
ip_hash;
server 192.168.0.12:88;
?server 192.168.0.13:80;
}
4、fair(第三方插件)
必須安裝upstream_fair模塊。
對(duì)比 weight、ip_hash更加智能的負(fù)載均衡算法,fair算法可以根據(jù)頁面大小和加載時(shí)間長短智能地進(jìn)行負(fù)載均衡,響應(yīng)時(shí)間短的優(yōu)先分配。哪個(gè)服務(wù)器的響應(yīng)速度快,就將請(qǐng)求分配到那個(gè)服務(wù)器上。
upstream backserver {
server server1;
server server2;
fair;
}
url_hash(第三方插件)
必須安裝Nginx的hash軟件包
按訪問url的hash結(jié)果來分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,可以進(jìn)一步提高后端緩存服務(wù)器的效率。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
?}
?
====Nginx配置高可用性怎么配置(負(fù)載均衡怎么做配置)?
當(dāng)上游服務(wù)器(真實(shí)訪問服務(wù)器),一旦出現(xiàn)故障或者是沒有及時(shí)相應(yīng)的話,應(yīng)該直接輪訓(xùn)到下一臺(tái)服務(wù)器,保證服務(wù)器的高可用
Nginx配置代碼:
server {
listen 80;
server_name www.lijie.com;
location / {
### 指定上游服務(wù)器負(fù)載均衡服務(wù)器
proxy_pass http://backServer;
###nginx與上游服務(wù)器(真實(shí)訪問的服務(wù)器)超時(shí)時(shí)間 后端服務(wù)器連接的超時(shí)時(shí)間_發(fā)起握手等
候響應(yīng)超時(shí)時(shí)間
proxy_connect_timeout 1s;
###nginx發(fā)送給上游服務(wù)器(真實(shí)訪問的服務(wù)器)超時(shí)時(shí)間
proxy_send_timeout 1s;
### nginx接受上游服務(wù)器(真實(shí)訪問的服務(wù)器)超時(shí)時(shí)間
proxy_read_timeout 1s;
index index.html index.htm;
}
}
?
====Nginx怎么判斷別IP不可訪問?
如果訪問的ip地址為192.168.9.115,則返回403
?if ($remote_addr = 192.168.9.115) {
return 403;
?}
?
====nginx怎么限制瀏覽器訪問?
## 不允許谷歌瀏覽器訪問 如果是谷歌瀏覽器返回500
if ($http_user_agent ~ Chrome) {
?return 500;
?}
?
====nginx中Rewrite全局變量是什么?
$args 這個(gè)變量等于請(qǐng)求行中的參數(shù),同$query_string
$content length 請(qǐng)求頭中的Content-length字段。
$content_type 請(qǐng)求頭中的Content-Type字段。
$document_root 當(dāng)前請(qǐng)求在root指令中指定的值。
$host 請(qǐng)求主機(jī)頭字段,否則為服務(wù)器名稱。
$http_user_agent 客戶端agent信息
$http_cookie 客戶端cookie信息
$limit_rate 這個(gè)變量可以限制連接速率。
$request_method 客戶端請(qǐng)求的動(dòng)作,通常為GET或POST。
$remote_addr 客戶端的IP地址。
$remote_port 客戶端的端口。
$remote_user 已經(jīng)經(jīng)過Auth Basic Module驗(yàn)證的用戶名。
$request_filename 當(dāng)前請(qǐng)求的文件路徑,由root或alias指令與URI請(qǐng)求生成。
$scheme HTTP方法(如http,https)。
$server_protocol 請(qǐng)求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1。
$server_addr 服務(wù)器地址,在完成一次系統(tǒng)調(diào)用后可以確定這個(gè)值。
$server_name 服務(wù)器名稱。
$server_port 請(qǐng)求到達(dá)服務(wù)器的端口號(hào)。
$request_uri
包含請(qǐng)求參數(shù)的原始URI,不包含主機(jī)名,如”/foo/bar.php?arg=baz”。
$uri 不帶請(qǐng)求參數(shù)的當(dāng)前URI,$uri不包含主機(jī)名,如”/foo/bar.html”。
$document_uri 與$uri相同。
更多面試題或?qū)W習(xí)資源可查看我主頁或評(píng)論獲取