1、什麼是Nginx
Nginx是一個高性能的反向代理服務器,他是一個非常高效的反向代理、負載平衡,他可以處理2-3萬併發連接數,官方監測能支持5萬併發
2、為什麼要用Nginx
跨平臺、配置簡單、方向代理、高併發連接:處理2-3萬併發連接數,官方監測能支持5萬併發,內存消耗小:開啟10個nginx才佔150M內存 ,nginx處理靜態文件好,耗費內存少,
而且Nginx內置的健康檢查功能:如果有一個服務器宕機,會做一個健康檢查,再發送的請求就不會發送到宕機的服務器了。重新將請求提交到其他的節點上。
使用Nginx的話還能:
節省寬帶:支持GZIP壓縮,可以添加瀏覽器本地緩存
穩定性高:宕機的概率非常小
接收用戶請求是異步的
3、為什麼Nginx性能這麼高
因為他的事件處理機制:異步非阻塞事件處理機制:運用了epoll模型,提供了一個隊列,排隊解決
4.Nginx怎麼處理請求的
nginx接收一個請求後,首先由listen和server_name指令匹配server模塊,再匹配server模塊裡的location,location就是實際地址
5.什麼是正向代理和反向代理
1、正向代理就是一個人發送一個請求直接就到達了目標的服務器
2、反方代理就是請求統一被Nginx接收,nginx反向代理服務器接收到之後,按照一定的規則分發給了後端的業務處理服務器進行處理了
6.使用“反向代理服務器的優點是什麼?
反向代理服務器可以隱藏源服務器的存在和特徵。它充當互聯網雲和web服務器之間的中間層。這對於安全方面來說是很好的,特別是當您使用web託管服務時。
7.Nginx的優缺點
優點:
1.佔內存小,可實現高併發連接,處理響應快
2.可實現http服務器、虛擬主機、方向代理、負載均衡
3.Nginx配置簡單
4.可以不暴露正式的服務器IP地址
缺點:
動態處理差:nginx處理靜態文件好,耗費內存少,但是處理動態頁面則很雞肋,現在一般前端用nginx作為反向代理抗住壓力,
8.如何用Nginx解決前端跨域問題?
使用Nginx轉發請求。把跨域的接口寫成調本域的接口,然後將這些接口轉發到真正的請求地址。
9 .限流怎麼做的,算法是什麼,(限制請求速度)
Nginx限流就是限制用戶請求速度,防止服務器受不了
限流有3種,我這隻寫了最平常的一種(限制訪問頻率(正常流量))
1、限制訪問頻率(正常流量)
2、限制訪問頻率(突發流量)
3、限制併發連接數
1、限制訪問頻率(正常流量):限制一個用戶發送的請求,我Nginx多久接收一個。
#定義限流維度,一個用戶一分鐘一個請求進來,多餘的全部漏掉
- limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
- #綁定限流維度
- server{
- location/seckill.html{
- limit_req zone=one
- proxy_pass http://lj_seckill;
- }
- }
1r/s代表1秒一個請求1r/m一分鐘接收一個請求
(此流也叫做漏桶流,多餘的請求全部不要,漏掉)
10.為什麼要做動靜分離?
Nginx是當下最熱的Web容器,網站優化的重要點在於靜態化網站,網站靜態化的關鍵點則是是動靜分離,動靜分離是讓動態網站裡的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以後,我們則根據靜態資源的特點將其做緩存操作。
讓靜態的資源只走靜態資源服務器,動態的走動態的服務器
Nginx的靜態處理能力很強,但是動態處理能力不足,因此,在企業中常用動靜分離技術。
對於靜態資源比如圖片,js,css等文件,我們則在反向代理服務器nginx中進行緩存。這樣瀏覽器在請求一個靜態資源時,代理服務器nginx就可以直接處理,無需將請求轉發給後端服務器tomcat。
若用戶請求的動態文件,比如servlet,jsp則轉發給Tomcat服務器處理,從而實現動靜分離。這也是反向代理服務器的一個重要的作用。
11.怎麼做的動靜分離
只需要指定路徑對應的目錄。location/可以使用正則表達式匹配。並指定對應的硬盤中的目錄。如下:(操作都是在Linux上)
- location /image/ {
- root /usr/local/static/;
- autoindex on;
- }
1、創建目錄
mkdir /usr/local/static/image
2、進入目錄
cd /usr/local/static/image
3、放一張照片上去#
ls
1.jpg
4、重啟 nginx
sudo nginx -s reload
5、打開瀏覽器 輸入 server_name/image/1.jpg 就可以訪問該靜態圖片了
12、Nginx負載均衡的算法怎麼實現的?策略有哪些?
為了避免服務器崩潰,大家會通過負載均衡的方式來分擔服務器壓力。將對臺服務器組成一個集群,當用戶訪問時,先訪問到一個轉發服務器,再由轉發服務器將訪問分發到壓力更小的服務器。
Nginx負載均衡實現的策略有以下五種:
(1) 輪詢(默認)
每個請求按時間順序逐一分配到不同的後端服務器,如果後端某個服務器宕機,能自動剔除故障系統。
- upstream backserver {
- server 192.168.0.12;
- server 192.168.0.13;
- }
(2) 權重 weight
weight的值越大分配到的訪問概率越高,主要用於後端每臺服務器性能不均衡的情況下。其次是為在主從的情況下設置不同的權值,達到合理有效的地利用主機資源。
- upstream backserver {
- server 192.168.0.12 weight=2;
- server 192.168.0.13 weight=8;
- }
權重越高,在被訪問的概率越大,如上例,分別是20%,80%。
(3) ip_hash( IP綁定)
每個請求按訪問IP的哈希結果分配,使來自同一個IP的訪客固定訪問一臺後端服務器,並且可以有效解決動態網頁存在的session共享問題
- upstream backserver {
- ip_hash;
- server 192.168.0.12:88;
- server 192.168.0.13:80;
- }
(4) fair(第三方插件)
必須安裝upstream_fair模塊。
對比 weight、ip_hash更加智能的負載均衡算法,fair算法可以根據頁面大小和加載時間長短智能地進行負載均衡,響應時間短的優先分配。
- upstream backserver {
- server server1;
- server server2;
- fair;
- }
哪個服務器的響應速度快,就將請求分配到那個服務器上。
(5) url_hash(第三方插件)
必須安裝Nginx的hash軟件包
按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,可以進一步提高後端緩存服務器的效率。
- upstream backserver {
- server squid1:3128;
- server squid2:3128;
- hash $request_uri;
- hash_method crc32;
- }
閱讀更多 互聯網全棧工程師 的文章