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