最近在搭建一個網(wǎng)站,就不可避免地要用到 Nginx司光,索性就出一期 Nginx 的入門教程琅坡,希望也可以幫助到大家~??
作為開發(fā)者,相信大家都知道 Nginx 的重要性残家。Nginx 是一個高性能的 HTTP 和反向代理 Web 服務器榆俺,由俄羅斯的伊戈爾·賽索耶夫開發(fā),第一個版本發(fā)布于 2004 年 10 月 4 日坞淮。
Nginx 的特點是:
- 內(nèi)存占用少
- 并發(fā)能力強(可支持大約 50000 個并發(fā)連接)
- 配置超簡潔
- bug 非常少
- 安裝超簡單
- 服務特別穩(wěn)(幾個月也不需要重啟)
基于這些特點茴晋,越來越多的網(wǎng)站開始使用 Nginx。于是回窘,掌握 Nginx 就變成了開發(fā)者的一項必不可少的技能诺擅。
一、Nginx 的作用
反向代理是 Nginx 作為 Web 服務器最常用的功能之一啡直。什么是反向代理呢烁涌?很多初學者在第一次遇到這個名詞的時候總免不了出現(xiàn)很多問號。
那要想搞明白什么是反向代理酒觅,就必須得搞明白什么是正向代理撮执。
舉個例子,小二的瀏覽器是無法直接訪問谷哥的舷丹,但香港的代理服務器是可以訪問谷哥的抒钱,于是小二訪問了香港的代理服務器,也就間接地訪問了谷哥颜凯。那這臺代理服務器也就是正向代理继效。
總結(jié)一句就是,正向代理是代理客戶端的装获,讓你能正常訪問目的服務器。
與之相反厉颤,反向代理是代理服務器的穴豫,讓大量的請求均衡地訪問到某一臺服務器上。
舉個例子逼友,10 萬個小二同時在訪問 itwanger.com精肃, 如果只有一臺服務器的話,很容易就癱瘓了帜乞,于是高并發(fā)的情況下會有很多臺服務器(假如 10 臺吧)來接這個活司抱,那怎么讓 10 萬個小二訪問到這 10 臺服務器呢?
這就需要一個反向代理服務器了黎烈,反向代理服務器讓 1 萬個小二訪問服務器 A习柠,1 萬個小二訪問服務器 B匀谣,1 個小二訪問服務器 C,這樣的話资溃,每臺服務器的壓力就相應減小了武翎,是不是很 nice?
那問題來了溶锭。每臺服務器的能力可能不同宝恶,比如說服務器 A 的內(nèi)存比較大一點,有 100 個 G趴捅;服務器 B 的內(nèi)存小一點垫毙,有 10 個 G;服務器 C 的內(nèi)存更小一點拱绑,只有 1 個 G综芥。怎么才能讓沒臺服務器承擔起它能力范圍內(nèi)的訪問呢?
Nginx 內(nèi)置了輪詢和加權(quán)輪詢來達到負載均衡的目的欺栗。服務器 A 牛逼就把它的權(quán)重加大一點毫痕,讓 5 萬個小二訪問它;服務器 B 弱一點迟几,權(quán)重就再小一點消请,讓 2 萬個小二訪問它;服務器 C 更弱类腮,權(quán)重就最小臊泰,讓 1 萬個小二訪問它。
除此之外蚜枢,Nginx 還有一個很牛逼的功能是動靜分離缸逃。
在我們的軟件開發(fā)中,有些請求是需要后臺處理的厂抽;有些請求是不需要后臺處理的需频,比如說 css、js 這些文件請求筷凤,這些不需要經(jīng)過后臺處理的文件就叫靜態(tài)文件昭殉。
我們可以根據(jù)一些規(guī)則,把動態(tài)資源和靜態(tài)資源分開藐守,然后通過 Nginx 把請求分開挪丢,靜態(tài)資源的請求就不需要經(jīng)過 Web 服務器處理了,從而提高整體上的資源的響應速度卢厂。
二乾蓬、Nginx 的安裝
針對不同的操作系統(tǒng),Nginx 的安裝各不相同慎恒。Windows 可以直接到官網(wǎng)下載 zip 綠色安裝包任内,解壓后就可以了撵渡。
之前帶大家白票過阿里云的服務器,有 Linux 服務器的話族奢,直接通過寶塔面板這個神器就可以安裝了姥闭。
不過,如果在安裝寶塔面板必備工具包的時候越走,如果選擇了 phpmyadmin(MySQL 的管理工具)棚品,會覆蓋掉 80 端口,就導致沒辦法直接通過默認配置的方式訪問 Nginx 啟動頁面了廊敌。
我這里以 macOS 環(huán)境為例铜跑,來演示一下。
第一步骡澈,通過 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 命令亏较。當我們修改了配置文件,是需要執(zhí)行一次 reload 命令讓 Nginx 生效的掩缓。
nginx 啟動
nginx -s stop 停止
nginx -s quit 安全退出
nginx -s reload 重新加載配置文件
ps aux|grep nginx 查看nginx進程
要知道雪情,Nginx 的 reload 對用戶是無感的,這一點我覺得很牛逼~
四你辣、Nginx 的配置
我們先來看一下 Nginx 的配置結(jié)構(gòu)圖:
main # 全局配置
├── events # 配置網(wǎng)絡連接
├── http # 配置代理旺罢、緩存、日志等
│ ├── upstream # 配置負載均衡
│ ├── server # 配置虛擬主機绢记,可以有多個 server
│ ├── server
│ │ ├── location # 用于匹配 URI(URL 是 URI 的一種),可以有多個 location
│ │ ├── location
│ │ └── ...
│ └── ...
└── ...
再把 Nginx 的默認配置拉出來看一下正卧,我把注釋加了進去蠢熄,這樣大家很容易就明白這行配置是用來干嘛的了。
worker_processes 1; # Nginx 進程數(shù)炉旷,一般設置為和 CPU 核數(shù)一樣
events {
worker_connections 1024; # 每個進程允許最大并發(fā)數(shù)
}
http {
include mime.types; # 文件擴展名與類型映射表
default_type application/octet-stream;
sendfile on; # 開啟高效傳輸模式
keepalive_timeout 65; # 保持連接的時間签孔,也叫超時時間叉讥,單位秒
server {
listen 8080; # 配置監(jiān)聽的端口
server_name localhost; # 配置的域名
location / {
root html; # 網(wǎng)站根目錄
index index.html index.htm; # 默認首頁文件
}
error_page 500 502 503 504 /50x.html; # 默認50x對應的訪問頁面
location = /50x.html {
root html;
}
}
include servers/*; # 加載子配置項
}
好,現(xiàn)在我們登錄寶塔面板饥追,嘗試把默認的 server 配置復制到 Linux 服務器中的 Nginx 配置里图仓。
簡單解釋一下。
由于我的服務器上 80 端口是默認打開的但绕,所以我將監(jiān)聽端口配置成了 80救崔,如果你配置成其他端口的話,記得寶塔面板和云服務的安全組里把端口打開捏顺。
root 我指定了 /home/www
目錄六孵,首頁文件為 index.html。這個文件是我自定義的幅骄,來看一下內(nèi)容劫窒。
<!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 的負載均衡岖赋,還有動靜分離檬果,等到二哥的網(wǎng)站跑起來后,可以專門搞個視頻給大家演示下唐断,比較直觀一點选脊。Nginx 的入門非常簡單,但有一說一脸甘,如果想要在工作中用好 Nginx恳啥,還是需要花費一番功夫的。
我這里再給大家推薦一些不錯的學習資料吧丹诀。
1)狂神說的視頻入門教程钝的,我個人覺得,狂神的入門教程還是非常舒適的铆遭,語速和內(nèi)容都剛剛好硝桩。
2)黑馬程序員Nginx教程,總共 159 講枚荣,基本上算是非常全面的 Nginx 的視頻教程了碗脊。
3)極客時間上的 Nginx100 講,講的比較深一點橄妆,涉及到不少原理層面的東西衙伶。錢包比較鼓的話祈坠,可以去付費下。不過矢劲,聽說在某個地方也可以白票赦拘。
4)Nginx 從入門到實踐,萬字詳解芬沉,圖文版的躺同,可以到掘金上看看這篇文章,內(nèi)容基本上面面俱到了(可以看一下下面的目錄)花嘶,配合前面的視頻課笋籽,拿下 Nginx 基本上是穩(wěn)了。
這些資料如果能全部過一遍的話椭员,我要喊你 Nginx 小王子了车海,估計公司遇到 Nginx 問題的話,你肯定是解決問題的那一個隘击。