上篇文章和大家聊了 Spring Session 實現(xiàn) Session 共享的問題,有的小伙伴看了后表示對 Nginx 還是很懵,因此有了這篇文章,算是一個 Nginx 掃盲入門吧!
Nginx
是一個高性能的 HTTP
和反向代理 web
服務(wù)器,同時也提供了 IMAP/POP3/SMTP
服務(wù)。
Nginx
是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的 Rambler.ru
站點開發(fā)的,第一個公開版本 0.1.0
發(fā)布于 2004
年 10
月 4
日。
Nginx
特點是占有內(nèi)存少,并發(fā)能力強。
事實上 nginx
的并發(fā)能力確實在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好,一般來說,如果我們在項目中引入了 Nginx
,我們的項目架構(gòu)可能是這樣:
在這樣的架構(gòu)中 , Nginx
所代表的角色叫做負(fù)載均衡服務(wù)器或者反向代理服務(wù)器,所有請求首先到達(dá) Nginx
上,再由 Nginx
根據(jù)提前配置好的轉(zhuǎn)發(fā)規(guī)則,將客戶端發(fā)來的請求轉(zhuǎn)發(fā)到某一個 Tomcat
上去。
那么這里涉及到兩個概念:
負(fù)載均衡服務(wù)器
就是進(jìn)行請求轉(zhuǎn)發(fā),降低某一個服務(wù)器的壓力。負(fù)載均衡策略很多,也有很多層,對于一些大型網(wǎng)站基本上從 DNS
就開始負(fù)載均衡,負(fù)載均衡有硬件和軟件之分,各自代表分別是 F5
和 Nginx
(目前 Nginx
已經(jīng)被 F5
收購),早些年,也可以使用 Apache
來做負(fù)載均衡,但是效率不如 Nginx
,所以現(xiàn)在主流方案是 Nginx
。
反向代理服務(wù)器:
另一個概念是反向代理服務(wù)器,要說反向代理,得先說正向代理,看下面一張圖:
在這個過程中,Google 并不知道真正訪問它的客戶端是誰,它只知道這個中間服務(wù)器在訪問它。因此,這里的代理,實際上是中間服務(wù)器代理了客戶端,這種代理叫做正向代理。
那么什么是反向代理呢?反向代理有點類似于大家打 10086 客服,看下面一張圖:
在這個過程中,10086 這個號碼相當(dāng)于是一個代理,真正提供服務(wù)的,是話務(wù)員,但是對于客戶來說,他不關(guān)心到底是哪一個話務(wù)員提供的服務(wù),他只需要記得 10086 這個號碼就行了。
所有的請求打到 10086 上,再由 10086 將請求轉(zhuǎn)發(fā)給某一個話務(wù)員去處理。因此,在這里,10086 就相當(dāng)于是一個代理,只不過它代理的是話務(wù)員而不是客戶端,這種代理稱之為反向代理。
在 Java 開發(fā)中,Nginx 有著非常廣泛的使用,隨便舉幾點:
使用 Nginx 做靜態(tài)資源服務(wù)器:Java 中的資源可以分為動態(tài)和靜態(tài),動態(tài)需要經(jīng)過 Tomcat 解析之后,才能返回給瀏覽器,例如 JSP 頁面、Freemarker 頁面、控制器返回的 JSON 數(shù)據(jù)等,都算作動態(tài)資源,動態(tài)資源經(jīng)過了 Tomcat 處理,速度必然降低。對于靜態(tài)資源,例如圖片、HTML、JS、CSS 等資源,這種資源可以不必經(jīng)過 Tomcat 解析,當(dāng)客戶端請求這些資源時,之間將資源返回給客戶端就行了。此時,可以使用 Nginx 搭建靜態(tài)資源服務(wù)器,將靜態(tài)資源直接返回給客戶端。
使用 Nginx 做負(fù)載均衡服務(wù)器,無論是使用 Dubbo 還是 Spirng Cloud ,除了使用各自自帶的負(fù)載均衡策略之外,也都可以使用 Nginx 做負(fù)載均衡服務(wù)器。
支持高并發(fā)、內(nèi)存消耗少、成本低廉、配置簡單、運行穩(wěn)定等。
由于基本上都是在 Linux 上使用 Nginx,因此松哥這里主要向大家展示 CentOS 7 安裝 Nginx:
首先下載 Nginx
wget http://nginx.org/download/nginx-1.17.0.tar.gz
然后解壓下載的目錄,進(jìn)入解壓目錄中,在編譯安裝之前,需要安裝兩個依賴:
yum -y install pcre-devel
yum -y install openssl openssl-devel
然后開始編譯安裝:
./configure
make
make install
裝好之后,默認(rèn)安裝位置在 :
/usr/local/nginx/sbin/nginx
進(jìn)入到該目錄的 sbin
目錄下,執(zhí)行 nginx
即可啟動 Nginx
:
Nginx 啟動成功之后,在瀏覽器中直接訪問 Nginx 地址:
看到如上頁面,表示 Nginx 已經(jīng)安裝成功了。
如果修改了 Nginx 配置,則可以通過如下命令重新加載 Nginx 配置文件:
./nginx -s reload