安裝
安裝依賴
在Linux中是編譯安裝,所以要準(zhǔn)備一系列工具
yum install pcre-devel make gcc gcc-c++ ncurses-devel perl zlib zlib-devel openssl openssl-devel
工具目的 | 程序 |
---|---|
編譯器 | make gcc gcc-c++ |
安全協(xié)議 | openssl openssl-devel |
語(yǔ)言 | perl腳本語(yǔ)言 |
正則表達(dá)式庫(kù) | pcre-devel(用于perl語(yǔ)言) |
壓縮庫(kù) | zlib zlib-devel |
字符處理庫(kù) | ncurses-devel |
cd /usr/local/
wget http://nginx.org/download/nginx-1.10.1.tar.gz
tar -zxvf nginx-1.10.1.tar.gz
cd nginx-1.10.1
執(zhí)行Configuration配置檢查文件炎码,指定目錄到剛剛新建的nginx目錄里
./configure --prefix=/usr/local/nginx
執(zhí)行make操作和make install進(jìn)行安裝
make
make install
安裝完成后负乡,將nginx命令移動(dòng)到$PATH的目錄下盯仪,這樣就不用每次都cd到 /usr/local/sbin 里去運(yùn)行了
mv /usr/local/nginx/sbin/nginx /usr/local/bin/
然后使用nginx -c 命令指定配置文件,接著使用 nginx -t 命令檢查配置文件是否正確羔味,得到反饋syntax is ok
nginx -c /usr/local/nginx/conf/nginx.conf
nginx -t
啟動(dòng):
nginx
重啟:
nginx -s reload
立即停止:
nginx –s stop
溫和停止:
nginx -s quit
強(qiáng)制關(guān)閉:
pkill nginx
打開瀏覽器訪問(wèn)此機(jī)器的 IP卡辰,如果瀏覽器出現(xiàn) Welcome to nginx! 則表示 Nginx 已經(jīng)安裝并運(yùn)行成功膏执。
配置
Nginx配置文件常見結(jié)構(gòu)的從外到內(nèi)依次是「http」「server」「location」等等驻售,缺省的繼承關(guān)系是從外到內(nèi),也就是說(shuō)內(nèi)層塊會(huì)自動(dòng)獲取外層塊的值作為缺省值更米。
- HTTP
HTTP代表在該計(jì)算機(jī)上啟動(dòng)HTTP路由欺栗,可以開啟不同的server服務(wù),所以HTTP內(nèi)可以包括多個(gè)server。
http {
server {
# 在80端口監(jiān)聽http服務(wù)
# 正常情況下會(huì)和個(gè)人電腦的瀏覽器沖突,但是服務(wù)器上一般沒(méi)瀏覽器
# 因?yàn)闉g覽器之所以能上網(wǎng)迟几,就是在80端口不停的監(jiān)聽http服務(wù)
listen 80;
server_name localhost;
......
}
server {
# 在8080端口監(jiān)聽http服務(wù)
listen 8080;
server_name localhost;
......
}
......
}
- Server
接收請(qǐng)求的服務(wù)器需要將不同的請(qǐng)求按規(guī)則轉(zhuǎn)發(fā)到不同的后端服務(wù)器上消请,在 nginx 中我們可以通過(guò)構(gòu)建虛擬主機(jī)(server)的概念來(lái)將這些不同的服務(wù)配置隔離。
server {
listen 80;
server_name host1;
root html;
index index.html index.htm;
}
server {
listen 80;
server_name host2;
root /data/www/html;
index index.html index.htm;
}
這里的 listen 指監(jiān)聽端口类腮,server_name 用來(lái)指定IP或域名臊泰,多個(gè)域名對(duì)應(yīng)統(tǒng)一規(guī)則可以空格分開,index 用于設(shè)定訪問(wèn)的默認(rèn)首頁(yè)地址蚜枢,root 指令用于指定虛擬主機(jī)的網(wǎng)頁(yè)跟目錄缸逃,這個(gè)地方可以是相對(duì)地址也可以是絕對(duì)地址。
但是當(dāng) server 超過(guò)2個(gè)時(shí)厂抽,建議將不同對(duì)虛擬主機(jī)的配置放在另一個(gè)文件中需频,然后通過(guò)在主配置文件 nginx.conf 加上 include 指令包含進(jìn)來(lái)。更便于管理筷凤。
include vhosts/*.conf;
由于DNS的存在昭殉,我們可以使用一個(gè)IP對(duì)應(yīng)多個(gè)域名,比如 www.a.com 和 www.b.com 這個(gè)稱之為host藐守,后邊的才是路徑path挪丢,Nginx會(huì)對(duì)HTTP的Request報(bào)文做如下處理。
POST /psas/bug/image/confirm HTTP/1.1 <== 第一行才是path
Accept: application/json
Content-Type: text/plain; charset=utf-8
Cookie: JSESSIONID=h72ql6a
Host: www.a.com:8080 <== 這一行是host
Connection: close
User-Agent: Paw/3.0.12 (Macintosh; OS X/10.12.0) GCDHTTPRequest
Content-Length: 366
接收到請(qǐng)求后去HTTP報(bào)文頭拿host字段卢厂。
去和server name字段進(jìn)行匹配乾蓬,哪個(gè)匹配上用哪個(gè)處理。
如果沒(méi)有匹配上慎恒,就用listen了當(dāng)前端口的默認(rèn)server處理巢块。
默認(rèn)server可以自己設(shè)置,如果沒(méi)有設(shè)置巧号,默認(rèn)配置文件中最靠前是默認(rèn)。
- Location
每個(gè) url 請(qǐng)求都會(huì)對(duì)應(yīng)的一個(gè)服務(wù)姥闭,nginx 進(jìn)行處理轉(zhuǎn)發(fā)或者是本地的一個(gè)文件路徑丹鸿,或者是其他服務(wù)器的一個(gè)服務(wù)路徑。而這個(gè)路徑的匹配是通過(guò) location 來(lái)進(jìn)行的棚品。我們可以將 server 當(dāng)做對(duì)應(yīng)一個(gè)域名進(jìn)行的配置靠欢,而 location 是在一個(gè)域名下對(duì)更精細(xì)的路徑進(jìn)行配置。如果有多個(gè)匹配的location塊铜跑,則nginx選擇最長(zhǎng)前綴的那個(gè)门怪。/的location塊的前綴只有一個(gè)字符,是最短的锅纺,因此只有當(dāng)其它location都匹配失敗時(shí)掷空,這個(gè)location才會(huì)被選擇。
匹配例子:
location = / {
# 只匹配"/".
[ configuration A ]
}
location / {
# 匹配任何請(qǐng)求,因?yàn)樗姓?qǐng)求都是以"/"開始
# 但是更長(zhǎng)字符匹配或者正則表達(dá)式匹配會(huì)優(yōu)先匹配
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 開始的請(qǐng)求坦弟,并停止匹配 其它location
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配以 gif, jpg, or jpeg結(jié)尾的請(qǐng)求.
# 但是所有 /images/ 目錄的請(qǐng)求將由 [Configuration C]處理.
[ configuration D ]
}
請(qǐng)求:
/ -> 符合configuration A
/documents/document.html -> 符合configuration B
/images/1.gif -> 符合configuration C
/documents/1.jpg ->符合 configuration D
具體可參考:Location配置詳細(xì)
服務(wù)靜態(tài)內(nèi)容:
web服務(wù)器的一個(gè)重要任務(wù)是對(duì)外輸出文件护锤,比如圖片和靜態(tài)網(wǎng)頁(yè)。你會(huì)實(shí)現(xiàn)一個(gè)這樣的例子:根據(jù)不同的請(qǐng)求酿傍,文件會(huì)從不同的本地目錄烙懦,如: /data/www (html) 和 /data/images 被輸出。這需要修改配置文件并且在http塊指令中建立帶有兩個(gè)location塊的server塊赤炒。
首先,創(chuàng)建/data/www的目錄并且放置一個(gè)index.html的文件氯析,然后創(chuàng)建/data/images目錄并放置一些圖片
下面的例子中它會(huì)匹配以/images/開始的請(qǐng)求(location / 也會(huì)匹配這個(gè)請(qǐng)求,但它的前綴更短) 莺褒。如掩缓,server塊指令看起來(lái)就像這樣
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
這個(gè)配置已經(jīng)可以工作了,它監(jiān)聽在標(biāo)準(zhǔn)的80端口上癣朗,并且可以在本機(jī)上通過(guò)http://localhost/ 訪問(wèn)拾因。為了響應(yīng)以/images/開頭的URI,服務(wù)器會(huì)從/data/images目錄中發(fā)送文件。比如:為了響應(yīng)http://localhost/images/example.png 旷余,nginx會(huì)發(fā)送/data/images/example.png這個(gè)文件绢记,如果不存在這樣的文件,nginx就會(huì)發(fā)送404錯(cuò)誤正卧。而不以/images/開頭的請(qǐng)求則被映射到/data/www目錄蠢熄,比如:http://localhost/some/example.html 被映射到/data/www/some/example.html文件。
建立簡(jiǎn)單的代理服務(wù)器:
nginx一個(gè)最常見的用途就是用作代理服務(wù)器炉旷,也就是把收到的請(qǐng)求傳遞給被代理的服務(wù)器签孔,并從被代理服務(wù)器中取回響應(yīng),再將其發(fā)送給客戶端窘行。
我們會(huì)配置一個(gè)基本的代理服務(wù)器饥追,對(duì)于圖片文件的請(qǐng)求,從本地目錄中發(fā)送文件罐盔,而對(duì)于其它的請(qǐng)求但绕,則把請(qǐng)求轉(zhuǎn)發(fā)給另一個(gè)被代理服務(wù)器。在這個(gè)例子里惶看,兩個(gè)服務(wù)器都會(huì)在一個(gè)單一的nginx實(shí)例中被定義捏顺。
首先,通過(guò)添加一個(gè)塊指令定義一個(gè)被代理服務(wù)器:
server {
listen 8080;
root /data/up1;
location / {
}
}
這是一個(gè)監(jiān)聽在8080端口的簡(jiǎn)單服務(wù)器(之前我們定義的server塊不聲明listen指令是因?yàn)槭褂昧藰?biāo)準(zhǔn)的80端口)并且會(huì)把所有請(qǐng)求映射到本地的 /data/upl 文件夾纬黎。創(chuàng)建這個(gè)文件夾并且放入一個(gè)index.html文件幅骄。注意,這里的root指令被放在了server上下文中本今。當(dāng)有一個(gè)location被選擇了而它的內(nèi)部卻沒(méi)有root指令時(shí)拆座,它就會(huì)使用server中的這個(gè)root指令主巍。
接下來(lái),修改在前一節(jié)中的server配置使它變?yōu)橐粋€(gè)代理服務(wù)器的配置懂拾。在第一個(gè)location塊中煤禽,添加proxy_pass指令,它的參數(shù)是被代理服務(wù)器的協(xié)議岖赋,名稱和端口檬果。(本例中,參數(shù)是 http://localhost:8080):
server {
location / {
proxy_pass http://localhost:8080;
}
location /images/ {
root /data;
}
}
我們現(xiàn)在修改第二個(gè)location塊唐断,使它由原先的匹配/images/前綴變?yōu)槠ヅ涞湫偷膱D片文件擴(kuò)展名选脊。修改后的location如下:
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
這個(gè)參數(shù)是一個(gè)匹配所有以.gif,.jpg或.png結(jié)尾的URI的正則表達(dá)式。~ 應(yīng)該被寫在正則表達(dá)式前面脸甘。
當(dāng)nginx選擇一個(gè)location時(shí)恳啥,它先檢查前綴,并且記錄匹配的location(最長(zhǎng)前綴),然后nginx再檢查正則表達(dá)式丹诀,如果有一個(gè)正則表達(dá)式匹配钝的,它就選擇這個(gè)location,否則铆遭,選擇之前記錄的location硝桩。
最終的代理服務(wù)器配置:
server {
location / {
proxy_pass http://localhost:8080/;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
現(xiàn)在,這個(gè)服務(wù)器可以將以.gif,.jpg或.png結(jié)尾的請(qǐng)求映射到本機(jī)目錄枚荣,將其它所有請(qǐng)求發(fā)送到被代理服務(wù)器碗脊。為了使配置生效,要發(fā)送reload信號(hào)橄妆。