最近在搭建一個網站,就不可避免地要用到 Nginx,索性就出一期 Nginx 的入門教程,希望也可以幫助到大家~??
作為開發者,相信大家都知道 Nginx 的重要性,Nginx 是一個高性能的 HTTP 和反向代理 Web 服務器,由俄羅斯的伊戈爾·賽索耶夫開發,第一個版本發布于 2004 年 10 月 4 日,

Nginx 的特點是:
- 記憶體占用少
- 并發能力強(可支持大約 50000 個并發連接)
- 配置超簡潔
- bug 非常少
- 安裝超簡單
- 服務特別穩(幾個月也不需要重啟)
基于這些特點,越來越多的網站開始使用 Nginx,于是,掌握 Nginx 就變成了開發者的一項必不可少的技能,
這篇已經收錄到《Java 程式員進階之路》專欄的「Nginx」篇,喜歡這個專欄的小伙伴可以去點個 star 關注下了,沖個 1000 star!
https://github.com/itwanger/toBeBetterJavaer
一、Nginx 的作用
反向代理是 Nginx 作為 Web 服務器最常用的功能之一,什么是反向代理呢?很多初學者在第一次遇到這個名詞的時候總免不了出現很多問號,

那要想搞明白什么是反向代理,就必須得搞明白什么是正向代理,
舉個例子,小二的瀏覽器是無法直接訪問谷哥的,但香港的代理服務器是可以訪問谷哥的,于是小二訪問了香港的代理服務器,也就間接地訪問了谷哥,那這臺代理服務器也就是正向代理,

總結一句就是,正向代理是代理客戶端的,讓你能正常訪問目的服務器,
與之相反,反向代理是代理服務器的,讓大量的請求均衡地訪問到某一臺服務器上,
舉個例子,10 萬個小二同時在訪問 itwanger.com, 如果只有一臺服務器的話,很容易就癱瘓了,于是高并發的情況下會有很多臺服務器(假如 10 臺吧)來接這個活,那怎么讓 10 萬個小二訪問到這 10 臺服務器呢?
這就需要一個反向代理服務器了,反向代理服務器讓 1 萬個小二訪問服務器 A,1 萬個小二訪問服務器 B,1 個小二訪問服務器 C,這樣的話,每臺服務器的壓力就相應減小了,是不是很 nice?

那問題來了,每臺服務器的能力可能不同,比如說服務器 A 的記憶體比較大一點,有 100 個 G;服務器 B 的記憶體小一點,有 10 個 G;服務器 C 的記憶體更小一點,只有 1 個 G,怎么才能讓沒臺服務器承擔起它能力范圍內的訪問呢?
Nginx 內置了輪詢和加權輪詢來達到負載均衡的目的,服務器 A 牛逼就把它的權重加大一點,讓 5 萬個小二訪問它;服務器 B 弱一點,權重就再小一點,讓 2 萬個小二訪問它;服務器 C 更弱,權重就最小,讓 1 萬個小二訪問它,
除此之外,Nginx 還有一個很牛逼的功能是動靜分離,
在我們的軟體開發中,有些請求是需要后臺處理的;有些請求是不需要后臺處理的,比如說 css、js 這些檔案請求,這些不需要經過后臺處理的檔案就叫靜態檔案,
我們可以根據一些規則,把動態資源和靜態資源分開,然后通過 Nginx 把請求分開,靜態資源的請求就不需要經過 Web 服務器處理了,從而提高整體上的資源的回應速度,

二、Nginx 的安裝
針對不同的作業系統,Nginx 的安裝各不相同,Windows 可以直接到官網下載 zip 綠色安裝包,解壓后就可以了,
http://nginx.org/en/download.html
之前帶大家白票過阿里云的服務器,有 Linux 服務器的話,直接通過寶塔面板這個神器就可以安裝了,
不過,如果在安裝寶塔面板必備工具包的時候,如果選擇了 phpmyadmin(MySQL 的管理工具),會覆寫掉 80 埠,就導致沒辦法直接通過默認配置的方式訪問 Nginx 啟動頁面了,

我這里以 macOS 環境為例,來演示一下,
第一步,通過 brew info nginx 命令查看 Nginx 是否安裝,

第二步,通過 brew install nginx 命令安裝 Nginx,

從以上資訊可以得出:
- 根目錄是
/usr/local/var/www - 組態檔是
/usr/local/etc/nginx/nginx.conf - 默認埠是 8080
第三步,通過 nginx 命令啟動 Nginx,

第四步,在瀏覽器地址欄通過 localhost:8080 訪問,可以看到以下歡迎頁面,

三、Nginx 常用命令
通常來說,Nginx 一旦啟動后,我們是很少讓它退出的,使用最多的就是 reload 命令,當我們修改了組態檔,是需要執行一次 reload 命令讓 Nginx 生效的,
nginx 啟動
nginx -s stop 停止
nginx -s quit 安全退出
nginx -s reload 重新加載組態檔
ps aux|grep nginx 查看nginx行程
要知道,Nginx 的 reload 對用戶是無感的,這一點我覺得很牛逼~
四、Nginx 的配置
我們先來看一下 Nginx 的配置結構圖:
main # 全域配置
├── events # 配置網路連接
├── http # 配置代理、快取、日志等
│ ├── upstream # 配置負載均衡
│ ├── server # 配置虛擬主機,可以有多個 server
│ ├── server
│ │ ├── location # 用于匹配 URI(URL 是 URI 的一種),可以有多個 location
│ │ ├── location
│ │ └── ...
│ └── ...
└── ...
再把 Nginx 的默認配置拉出來看一下,我把注釋加了進去,這樣大家很容易就明白這行配置是用來干嘛的了,
worker_processes 1; # Nginx 行程數,一般設定為和 CPU 核數一樣
events {
worker_connections 1024; # 每個行程允許最大并發數
}
http {
include mime.types; # 檔案擴展名與型別映射表
default_type application/octet-stream;
sendfile on; # 開啟高效傳輸模式
keepalive_timeout 65; # 保持連接的時間,也叫超時時間,單位秒
server {
listen 8080; # 配置監聽的埠
server_name localhost; # 配置的域名
location / {
root html; # 網站根目錄
index index.html index.htm; # 默認首頁檔案
}
error_page 500 502 503 504 /50x.html; # 默認50x對應的訪問頁面
location = /50x.html {
root html;
}
}
include servers/*; # 加載子配置項
}
好,現在我們登錄寶塔面板,嘗試把默認的 server 配置復制到 Linux 服務器中的 Nginx 配置里,

簡單解釋一下,
由于我的服務器上 80 埠是默認打開的,所以我將監聽埠配置成了 80,如果你配置成其他埠的話,記得寶塔面板和云服務的安全組里把埠打開,
root 我指定了 /home/www 目錄,首頁檔案為 index.html,這個檔案是我自定義的,來看一下內容,
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>沉默王二</title>
<body>
<img src="niubi.jpeg" />
</body>
</html>
很言簡意賅,總之就是二哥,牛逼~
好,保存組態檔,并且 reload Nginx,我們在本地的瀏覽器中輸入服務器的 IP 地址就可以看到效果了,

五、Nginx 的學習資料
關于 Nginx 的負載均衡,還有動靜分離,等到二哥的網站跑起來后,可以專門搞個視頻給大家演示下,比較直觀一點,Nginx 的入門非常簡單,但有一說一,如果想要在作業中用好 Nginx,還是需要花費一番功夫的,
我這里再給大家推薦一些不錯的學習資料吧,
1)狂神X的視頻入門教程,我個人覺得,狂神的入門教程還是非常舒適的,語速和內容都剛剛好,
https://www.bilibili.com/video/BV1F5411J7vK
2)黑X程式員Nginx教程,總共 159 講,基本上算是非常全面的 Nginx 的視頻教程了,
https://www.bilibili.com/video/BV1ov41187bq
3)極客xx上的 Nginx100 講,講的比較深一點,涉及到不少原理層面的東西,錢包比較鼓的話,可以去付費下,不過,聽說在某個地方也可以白票,
4)Nginx 從入門到實踐,萬字詳解,圖文版的,可以到x金上看看這篇文章,內容基本上面面俱到了(可以看一下下面的目錄),配合前面的視頻課,拿下 Nginx 基本上是穩了,

https://juejin.cn/post/6844904144235413512
這些資料如果能全部過一遍的話,我要喊你 Nginx 小王子了,估計公司遇到 Nginx 問題的話,你肯定是解決問題的那一個,
本篇已收錄至 GitHub 上開源專欄《Java 程式員進階之路》,最近更新了不少干貨上去,所以沒點 star 的小伙伴趕緊去點一波了,畢竟 star 了這個倉庫就等于成為了一名更優秀的 Java 程式員,
https://github.com/itwanger/toBeBetterJavaer

微信掃描左側二維碼,關注作者的微信公眾號:「沉默王二」
后臺回復“666”即可獲取一份 500G 的高清教學視頻,并且已經分門別類,可以按需下載,速去!
本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利,
如果覺得還有幫助的話,可以點一下右下角的【推薦】,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/394911.html
標籤:Java
