作為一個(gè)前端開(kāi)發(fā)人員,懂點(diǎn)服務(wù)器端的知識(shí)也是必不可少的拱镐,畢竟艘款,我們可不想為了做一個(gè)簡(jiǎn)單的測(cè)試還得去麻煩別人,自給自足沃琅,沒(méi)什么不好磷箕。如果你有時(shí)間和精力,向全棧邁進(jìn)也未嘗不可阵难。
我最近正在做一個(gè)仿iOS端微信的聊天App-WChat岳枷,從前端到后臺(tái),全都是靠自己來(lái)實(shí)現(xiàn)呜叫。所以最近也接觸了一些服務(wù)器知識(shí)空繁,后面還準(zhǔn)備了一篇關(guān)于Node.js
的文章。該項(xiàng)目的WebSocket
是通過(guò)Node.js
來(lái)實(shí)現(xiàn)的朱庆,后期的數(shù)據(jù)請(qǐng)求可能也是基于Node.js
實(shí)現(xiàn)盛泡。
Nginx介紹
Nginx(engine x
)是一個(gè)高性能的HTTP服務(wù)器(其實(shí)不止HTTP服務(wù)器),一般主要用作負(fù)載均衡和反向代理(如果你不清楚什么是反向代理娱颊,可以閱讀我的另一篇文章)傲诵。
Nginx有一個(gè)主進(jìn)程和很多工作進(jìn)程,主進(jìn)程的作用只有一個(gè):通過(guò)讀取配置文件(nginx.conf
)來(lái)維持工作進(jìn)程正常工作箱硕。工作進(jìn)程對(duì)應(yīng)的才是實(shí)際的請(qǐng)求(request
)拴竹,Nginx會(huì)自動(dòng)將客戶端的請(qǐng)求高效的分發(fā)給工作進(jìn)程。工作進(jìn)程的數(shù)量在配置文件中定義剧罩,或者通過(guò)CPU的核心數(shù)自動(dòng)調(diào)整栓拜。(可參考官方文檔)
在Linux系統(tǒng)下,Nginx的配置文件默認(rèn)在/usr/local/nginx/conf/nginx.conf
、/etc/nginx/nginx.conf
或/usr/local/etc/nginx/nginx.conf
中幕与。我是在CentOS
系統(tǒng)下使用的Nginx挑势,本篇就基于CentOS
來(lái)介紹。
Nginx安裝
對(duì)于Nginx的安裝啦鸣,官方的文檔在這里潮饱,建議參閱官方說(shuō)明(比較考驗(yàn)英文)。我是一路上踏過(guò)很多坑才把Nginx安裝好(主要是由于Nginx版本和Linux版本都在不斷更新诫给,而百度出來(lái)的大多數(shù)教程都是過(guò)時(shí)的饼齿,或多或少都會(huì)有些問(wèn)題)。
yum安裝
推薦使用yum
來(lái)安裝蝙搔,簡(jiǎn)單省事。官方鏈接
方法很簡(jiǎn)單考传,首先創(chuàng)建/etc/yum.repos.d/nginx.repo
文件吃型,然后寫入以下內(nèi)容:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
其中的OS
是你的Linux版本,我的是centos
僚楞,直接替換就好勤晚。OSRELEASE
是版本號(hào),6.x就寫6
泉褐,7.x就寫7
赐写。比如我的baseurl
就是http://nginx.org/packages/centos/6/$basearch/
。
然后就可以直接使用yum install -y nginx
命令來(lái)一建安裝膜赃,搞定挺邀。
通過(guò)yum安裝的Nginx的配置文件可能位于/etc/nginx/nginx.conf
。
源碼安裝
不推薦使用這種方法跳座,對(duì)于新手來(lái)說(shuō)太折騰了端铛。首先要安裝依賴包:gcc
、g++
疲眷、PCRE
禾蚕、zlib
、openSSL
狂丝。
安裝依賴
- 安裝
gcc
换淆、g++
,用來(lái)編譯源碼几颜;
$ yum install -y gcc gcc-c++
-
PCRE
倍试,Perl正則表達(dá)式;
$ yum install pcre pcre-devel
-
zlib
蛋哭,gzip壓縮易猫;
$ yum install zlib zlib-devel
-
OpenSSL
,SSL協(xié)議。
$ yum install openssl openssl-devel
如果你愛(ài)折騰准颓,這些依賴包也可以下載源碼哈蝇,通過(guò)編譯來(lái)安裝。這里最頭疼的就是版本之間的差異攘已,涉及到的依賴包太多炮赦,有時(shí)候版本之間就會(huì)不兼容,或者需要其他的一些配置样勃。
安裝Nginx
去官網(wǎng)下載Nginx吠勘,最好不要下載最新版本,如果最新版本跟網(wǎng)上大多數(shù)教程說(shuō)的有差異的話峡眶,真的很折騰人剧防。
Linux下命令行操作:
# 下載源碼
$ wget http://nginx.org/download/nginx-1.13.0.tar.gz
# 解壓源碼
$ tar xvf nginx-1.13.0.tar.gz
# 進(jìn)入源碼目錄
$ cd nginx-1.13.0
# 配置、編譯辫樱、安裝
$ ./configure
$ make
$ make install
如果順利的話峭拘,Nginx就已經(jīng)安裝完成啦。如果不順利的話狮暑,就自行百度去或直接采用上面介紹的yum
來(lái)安裝鸡挠。./configure
命令可以帶很多參數(shù)進(jìn)行配置,我記不住那么多搬男,需要的話還是自行百度拣展。
這就是安裝Nginx大概的流程,先安裝依賴缔逛,再安裝Nginx备埃。不同系統(tǒng)不同版本之間可能會(huì)有差異,按照上面的方法你也不一定會(huì)成功褐奴。起初我在./configure
這一步就總是失敗瓜喇,就算帶上詳細(xì)的參數(shù)(--sbin-path
之類的)也是失敗。
Nginx基本使用
如果你已經(jīng)成功安裝Nginx歉糜,那么你現(xiàn)在直接在命令行中敲入nginx
乘寒,然后回車,即可啟動(dòng)Nginx服務(wù)器匪补。這時(shí)伞辛,你就可以在客戶端輸入你服務(wù)器的IP地址,就可以訪問(wèn)服務(wù)器默認(rèn)的頁(yè)面了夯缺。
啟動(dòng)蚤氏、停止、重新加載配置信息
啟動(dòng)Nginx之后踊兜,你就可以使用下面的命令格式進(jìn)行簡(jiǎn)單的操作了竿滨。
$ nginx -s signal
其中,signal
可以是以下指令:
-
stop
:關(guān)閉Nginx,會(huì)立刻終止所有的客戶端請(qǐng)求于游。 -
quit
:關(guān)閉Nginx毁葱,直接翻譯過(guò)來(lái)就是優(yōu)雅的關(guān)閉。它會(huì)等當(dāng)前所有的請(qǐng)求完成之后再關(guān)閉Nginx贰剥。 -
reload
:重新加載配置文件倾剿。一般當(dāng)你修改配置文件后,使用它可以讓修改的配置生效蚌成。 -
reopen
:重新打開(kāi)日志文件前痘,目前還沒(méi)用到它。
官方還介紹了通過(guò)kill
指令來(lái)向Nginx進(jìn)程發(fā)送這些操作信號(hào)担忧。
配置文件簡(jiǎn)單說(shuō)明
打開(kāi)配置文件vim /usr/local/nginx/conf/nginx.conf
芹缔,文件結(jié)構(gòu)大致如下:
http {
server {
listen 80;
server_name www.mohng.com;
location / {
root html;
index index.html index.htm;
}
location /wchat {
root html;
index index.html;
}
}
server {
listen 8080;
serer_name mail.mohng.com;
location / {
index index.html;
}
}
}
其中,一個(gè)server
就相當(dāng)于一個(gè)服務(wù)器瓶盛,你可以配置多個(gè)server
模塊來(lái)虛擬多個(gè)服務(wù)器最欠。listen
表示該服務(wù)器監(jiān)聽(tīng)哪個(gè)端口,默認(rèn)是80
端口蓬网。server_name
表示匹配主機(jī)名,比如我的server_name
是www.mohng.com
鹉勒,那么帆锋,當(dāng)客戶端通過(guò)域名www.mohng.com
(前提是該域名已經(jīng)正確解析到該服務(wù)器的IP地址)來(lái)訪問(wèn)的時(shí)候,就是匹配到這個(gè)服務(wù)器禽额。如果客戶端通過(guò)域名mail.mohng.com:8080
來(lái)訪問(wèn)的時(shí)候锯厢,就會(huì)匹配到下面那個(gè)服務(wù)器。如果你通過(guò)IP直接訪問(wèn)脯倒,會(huì)默認(rèn)訪問(wèn)第一個(gè)服務(wù)器实辑。
location
就是匹配的路由,root
是返回給客戶端資源文件的根目錄藻丢,它是相對(duì)nginx
路徑的剪撬,也可以指定絕對(duì)路徑(比如:/usr/local/nginx/www
)。index
就是默認(rèn)返回的文件名(比如index.html
悠反,index.php
残黑,index.asp
等)。
配置簡(jiǎn)單的反向代理服務(wù)器斋否,只需在匹配到的路由location
模塊中梨水,使用proxy_pass
來(lái)轉(zhuǎn)到真實(shí)的服務(wù)器。
location / {
proxy_pass http://www.baidu.com;
}
更多配置文件的詳細(xì)說(shuō)明請(qǐng)參閱官方文檔茵臭。
總結(jié)
其實(shí)疫诽,Nginx本身不難,難的是操蛋的英文。現(xiàn)在大多數(shù)工具奇徒、框架雏亚、技術(shù)文檔,都是大篇大篇的英文逼龟,看起來(lái)實(shí)在痛苦评凝。就比如React
和Vue
,我相信在國(guó)內(nèi)腺律,學(xué)好Vue
比學(xué)好React
要容易的多吧奕短。
不管什么東西,最好的學(xué)習(xí)途徑還是官方文檔匀钧,畢竟翎碑,官方的文檔永遠(yuǎn)都是最新的。就拿webpack
來(lái)說(shuō)之斯,現(xiàn)在網(wǎng)絡(luò)上大部分教程都還是基于1.x
的日杈,如果直接拿來(lái)在2.x
中使用全是坑。