前言
Nginx
?寫了那么多文章,為什么今天才輪到它的表演?那是因為它實在太重要了,值得大書特書,特別對待。
當我們遇到單點瓶頸,第一個idea是?Nginx;
當我們需要反向代理,第一個idea是?Nginx;
當我們需要靜態部署,第一個idea是?Nginx;
當我們需要透傳服務,第一個idea是?Nginx;
好了好了,不再羅列了,博主手都麻了…
當我們遇到一件趁手的
武器
,是不是愿意找一個合適的“對手”
,練一練?
當我們遇到一件棘手的問題
,是不是愿意找一個熟練的“隊友”
,試一試?
答案是肯定的,畢竟我們都愿意“百尺竿頭,更進一步”
,不希望“按部就班,坐以待斃”
。
在Nginx
正式表演前,博主首先讓它的“隊友們”
報個到,歡迎三連,有求必應:
- 微服務實戰系列之Feign
- 微服務實戰系列之Sentinel
- 微服務實戰系列之Token
- 微服務實戰系列之Nacos
- 微服務實戰系列之Gateway
- 微服務實戰系列之加密RSA
- 微服務實戰系列之簽名Sign
話鋒一轉,請允許博主帶著大家熟悉Nginx
,探索它的奧秘。
一、前世
Nginx
是一款輕量級的Web 服務器以及電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特點是占有內存少,并發能力強,事實上Nginx
的并發能力在同類型的網頁服務器中表現較好。
通過一段標準語言,我們可以大致了解到Nginx
幾個特征:
1. 反向代理
2. Web服務器
3. 郵件代理服務
4. 并發
5. 輕量級
當然,博主嘗試將其翻譯成工程實踐
語言,大致可以包括以下幾個功能:
1. 代理服務(反向、郵件)
2. Web服務(面向前端)
3. 負載均衡(高并發)
4. 緩存服務(靜態資源)
通過以上的應用場景,博主繼續帶著大家剖析Nginx,探究一下它為何如此迷人。
二、今生
1. 代理服務
談到代理服務,各位盆友首先想到什么?
比如小花一個消息,今天沒空,讓你幫她買個零食…
比如小芳一通電話,今天請假,讓你幫她取個快遞…
諸如此類,皆算代理的范疇,原因是什么?因為不管小花小芳,還是你,都能夠基于同一個方法完成一件事。通俗講,就是“代勞”
。這個時候,小花小芳都是采用了代理服務,而且是正向代理
,那么你就是“正向代理服務器”
。
既然有正向代理
,自然就有反向代理了,因為講究對稱嘛(暗然自喜)~
反向代理
是怎么回事?無非是你要吃的,我事先替你備齊,你自取。如此這般,方便你我他,相親相愛一家人。
所以,自從有了代理這個業務,這世上似乎“懶人”
變多了,當然生活品質也提高了。
Nginx如何配置代理,可參考以下:
server{location /api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://localhost:8080/; //這句很關鍵}
}
2. Web服務
提到Web服務,博主首先會聯想到從早年的Apache、IIS,到如今的Nginx、Tomcat、WebLogic等等。不禁有感而發:“變化的始終是工具,不變的是永恒的服務”
。
Nginx
作為Web服務器,主要做什么呢?
比如部署一套vue,比如上傳一組圖片資源等等,可以通過http訪問即可。如果不清楚怎么使用,可以參考以下配置,指定訪問目錄即可:
server{location / {root /usr/local/html; //這句很關鍵try_files $uri $uri/ /index.html;index index.html index.htm;}
}
3. 負載均衡
負載均衡?好像在哪里提過?對了, 網關。如有興趣,請回看博主相關介紹。
正因為Nginx有這個作用,所以在微服務中,Nginx的任務相當艱巨,所謂能力越大,責任越大,當然期望越高。
如何配置?可參考如下:
http {upstream myserver {server 192.168.1.11:8080 weight=10;//設置權重server 192.168.1.12:8081 weight=10;}server {listen 80;// 默認端口server_name 192.168.1.10;location / {proxy_pass http://myserver;root /usr/local/html;index index.html index.htm;}
}
4. 緩存服務
Nginx
也可以做緩存?答案是的。
某些場景下,Nginx需要Worker
到服務中獲取數據并返回客戶端,在高并發場景下,我們可以將這些數據緩存到Nginx中。
如何配置,可參考如下:
http {# 設置緩存路徑、目錄層級(1:2 表示兩個子目錄)、內存zone的名字和內存大小# 緩存有效時間、硬盤最大存儲大小、緩存文件直接寫到cache文件中而不使用temp_pathproxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=ngxcache:100m inactive=7d max_size=1g use_temp_path=off;server { proxy_cache ngxcache;proxy_cache_valid 200 304 5m;proxy_cache_valid 301 302 2m;proxy_cache_min_uses 1;# 添加一個響應頭,用來標識請求是否命中緩存add_header N-Cache-Status $upstream_cache_status;proxy_cache_methods GET HEAD;proxy_cache_convert_head on;proxy_cache_key $scheme$host$uri$is_args$args;proxy_cache_background_update on;}
}
綜上,關于Nginx,博主帶著各位盆友進行功能剖析,旨在一文把握它的命脈。如果還需了解更詳細的內容,可參考官網文檔,了解每個參數的配置的意義,博主不再啰嗦了。
結語
微服務盛行于當下,好比日出東方之時,趁著朝霞,獲得希望。
各位盆友,GoodNight!