Spring Boot2 系列教程(二十七)Nginx 極簡掃盲入門
- 2019 年 11 月 14 日
- 筆記
上篇文章和大家聊了 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 有一個基本的認知。本文先說到這裡,有問題歡迎留言討論。
1、Spring Boot2 系列教程(一)純 Java 搭建 SSM 項目
2、Spring Boot2 系列教程(二)創建 Spring Boot 項目的三種方式
3、Spring Boot2 系列教程(三)理解 spring-boot-starter-parent
4、Spring Boot2 系列教程(四)理解配置文件 application.properties !
5、Spring Boot2 系列教程(五)Spring Boot中的 yaml 配置
6、Spring Boot2 系列教程(六)自定義 Spring Boot 中的 starter
7、Spring Boot2 系列教程(七)理解自動化配置的原理
8、Spring Boot2 系列教程(八)Spring Boot 中配置 Https
9、Spring Boot2 系列教程(九)Spring Boot 整合 Thymeleaf
10、Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker
11、Spring Boot2 系列教程(十一)Spring Boot 中的靜態資源配置
12、Spring Boot2 系列教程(十二)@ControllerAdvice 的三種使用場景
13、Spring Boot2 系列教程(十三)Spring Boot 中的全局異常處理
14、Spring Boot2 系列教程(十四)CORS 解決跨域問題
15、Spring Boot2 系列教程(十五)定義系統啟動任務的兩種方式
16、Spring Boot2 系列教程(十六)定時任務的兩種實現方式
17、Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
18、Spring Boot2 系列教程(十八)Spring Boot 中自定義 SpringMVC 配置
19、Spring Boot2 系列教程(十九)Spring Boot 整合 JdbcTemplate
20、Spring Boot2 系列教程(二十)Spring Boot 整合JdbcTemplate 多數據源
21、Spring Boot2 系列教程(二十一)整合 MyBatis
22、Spring Boot2 系列教程(二十二)整合 MyBatis 多數據源
23、Spring Boot2 系列教程(二十三)理解 Spring Data Jpa
26、Spring Boot2 系列教程(二十六)Spring Boot 整合 Redis
