給小白的Nginx入門(mén)指南-30分鐘從小白到專家
h以前寫(xiě)過(guò)一些Nginx的文章,但都是用到什么說(shuō)什么,沒(méi)有一個(gè)完整系統(tǒng)的總結(jié)。趁最近有時(shí)間,打算將Nginx相關(guān)的內(nèi)容重新整理一下。
01Nginx安裝1.1 Nginx簡(jiǎn)介
1.1.1?什么是Nginx
Nginx是一款高性能的http 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器。由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開(kāi)發(fā),官方測(cè)試nginx能夠支支撐5萬(wàn)并發(fā)鏈接,并且cpu、內(nèi)存等資源消耗卻非常低,運(yùn)行非常穩(wěn)定。
1.1.2?Nginx的應(yīng)用場(chǎng)景
1、http服務(wù)器。Nginx是一個(gè)http服務(wù)可以獨(dú)立提供http服務(wù)。可以做網(wǎng)頁(yè)靜態(tài)服務(wù)器。
2、虛擬主機(jī)。可以實(shí)現(xiàn)在一臺(tái)服務(wù)器虛擬出多個(gè)網(wǎng)站。例如個(gè)人網(wǎng)站使用的虛擬主機(jī)。
3、反向代理,負(fù)載均衡。當(dāng)網(wǎng)站的訪問(wèn)量達(dá)到一定程度后,單臺(tái)服務(wù)器不能滿足用戶的請(qǐng)求時(shí),需要用多臺(tái)服務(wù)器集群可以使用nginx做反向代理。并且多臺(tái)服務(wù)器可以平均分擔(dān)負(fù)載,不會(huì)因?yàn)槟撑_(tái)服務(wù)器負(fù)載高宕機(jī)而某臺(tái)服務(wù)器閑置的情況。
1.2 Nginx安裝1.2.1?下載
2.ginx.org/en/download.html,我這邊使用的是nginx1.8.0版本,大家可以下載最新穩(wěn)定版。

1.2.2?安裝
i. 安裝環(huán)境
我這里是Centos7.0作為安裝環(huán)境,除此之外還要安裝gcc,pcre等軟件,都是一個(gè)命令就安裝的,這里就不一一細(xì)說(shuō)了。
安裝的前提條件:
gcc
安裝nginx需要先將官網(wǎng)下載的源碼進(jìn)行編譯,編譯依賴gcc環(huán)境,如果沒(méi)有g(shù)cc環(huán)境,需要安裝gcc。
yum install gcc-c++
PCRE
PCRE(Perl Compatible Regular Expressions)是一個(gè)Perl庫(kù),包括 perl 兼容的正則表達(dá)式庫(kù)。nginx的http模塊使用pcre來(lái)解析正則表達(dá)式,所以需要在linux上安裝pcre庫(kù)。
yum install -y pcre pcre-devel注:pcre-devel是使用pcre開(kāi)發(fā)的一個(gè)二次開(kāi)發(fā)庫(kù)。nginx也需要此庫(kù)。
zlib
zlib庫(kù)提供了很多種壓縮和解壓縮的方式,nginx使用zlib對(duì)http包的內(nèi)容進(jìn)行g(shù)zip,所以需要在linux上安裝zlib庫(kù)。
yum install -y zlib zlib-developenssl
OpenSSL 是一個(gè)強(qiáng)大的安全套接字層密碼庫(kù),囊括主要的密碼算法、常用的密鑰和證書(shū)封裝管理功能及SSL協(xié)議,并提供豐富的應(yīng)用程序供測(cè)試或其它目的使用。
nginx不僅支持http協(xié)議,還支持https(即在ssl協(xié)議上傳輸http),所以需要在linux安裝openssl庫(kù)。
yum install -y openssl openssl-develii. 編譯安裝
安裝環(huán)境準(zhǔn)備好之后,下面就開(kāi)始安裝,具體安裝步驟如下:
步驟1:將nginx-1.8.0.tar.gz拷貝至linux服務(wù)器,并解壓。
解壓:
ar -zxvf nginx-1.8.0.tar.gzcd nginx-1.8.0步驟2:創(chuàng)建一個(gè)makefile文件。通過(guò)./configure 命令來(lái)配置相關(guān)的參數(shù)。具體命令如下:
./configure --help查詢?cè)敿?xì)參數(shù)
./configure \--prefix=/usr/local/nginx \--pid-path=/var/run/nginx/nginx.pid \--lock-path=/var/lock/nginx.lock\--error-log-path=/var/log/nginx/error.log \--http-log-path=/var/log/nginx/access.log \--with-http_gzip_static_module \--http-client-body-temp-path=/var/temp/nginx/client \--http-proxy-temp-path=/var/temp/nginx/proxy \--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \--http-scgi-temp-path=/var/temp/nginx/scgi注意:上邊將臨時(shí)文件目錄指定為/var/temp/nginx,需要在/var下創(chuàng)建temp及nginx目錄步驟3:編譯
make
步驟4:安裝
make install安裝成功查看安裝目錄 :

1.2.3?啟動(dòng)nginx
Nginx安裝成功之后,接下來(lái)看看如何啟動(dòng)nginx。
首先,進(jìn)入Nginx的安裝目錄,使用如下命令:
cd /usr/local/nginx/sbin/然后,執(zhí)行啟動(dòng)命令
./nginx最后,查詢nginx進(jìn)程,確認(rèn)Nginx 是否啟動(dòng)
ps aux|grep nginx可以看到如下輸出:

注意:執(zhí)行./nginx啟動(dòng)nginx,這里可以-c指定加載的nginx配置文件,如下:
./nginx -c /usr/local/nginx/conf/nginx.conf如果不指定-c,nginx在啟動(dòng)時(shí)默認(rèn)加載conf/nginx.conf文件,此文件的地址也可以在編譯安裝nginx時(shí)指定./configure的參數(shù)(--conf-path= 指向配置文件(nginx.conf))
方式1:快速停止:
cd /usr/local/nginx/sbin./nginx -s stop此方式相當(dāng)于先查出nginx進(jìn)程id再使用kill命令強(qiáng)制殺掉進(jìn)程。
方式2:完整停止(建議使用):
cd /usr/local/nginx/sbin./nginx -s quit此方式停止步驟是待nginx進(jìn)程處理任務(wù)完畢進(jìn)行停止。
1.2.5?重啟nginx
方式1:先停止再啟動(dòng)(建議使用):
對(duì)nginx進(jìn)行重啟相當(dāng)于先停止nginx再啟動(dòng)nginx,即先執(zhí)行停止命令再執(zhí)行啟動(dòng)命令。
如下:
./nginx -s quit./nginx方式2:重新加載配置文件:
當(dāng)nginx的配置文件nginx.conf修改后,要想讓配置生效需要重啟nginx,使用-s reload不用先停止nginx再啟動(dòng)nginx即可將配置信息在nginx中生效,如下:
./nginx -s reload1.3 安裝測(cè)試nginx安裝成功,啟動(dòng)nginx,即可訪問(wèn)虛擬機(jī)上的nginx:

到這說(shuō)明nginx基本上安裝成功。
02什么是虛擬主機(jī)2.1 什么是虛擬主機(jī)
虛擬主機(jī)是一種特殊的軟硬件技術(shù),它可以將網(wǎng)絡(luò)上的每一臺(tái)計(jì)算機(jī)分成多個(gè)虛擬主機(jī),每個(gè)虛擬主機(jī)可以獨(dú)立對(duì)外提供www服務(wù),這樣就可以實(shí)現(xiàn)一臺(tái)主機(jī)對(duì)外提供多個(gè)web服務(wù),每個(gè)虛擬主機(jī)之間是獨(dú)立的,互不影響的。如下圖所示:

通過(guò)nginx可以實(shí)現(xiàn)虛擬主機(jī)的配置,nginx支持三種類型的虛擬主機(jī)配置:
1、基于ip的虛擬主機(jī)
2、基于域名的虛擬主機(jī)
3、基于端口的虛擬主機(jī)
實(shí)際使用的過(guò)程中,我們一般常用的是用域名或是端口來(lái)區(qū)分web服務(wù)。只不過(guò)我這里為了講的全面一點(diǎn),會(huì)把三種配置都講一講。
2.2 Nginx配置文件的結(jié)構(gòu)
介紹了什么是虛擬主機(jī),下面介紹下nginx的配置文件結(jié)構(gòu),虛擬主機(jī)配置的位置,具體如下:
......events {.......}http{.......server{.......}server{.......}}
每個(gè)server就是一個(gè)虛擬主機(jī)。
03基于ip的虛擬主機(jī)配置Linux操作系統(tǒng)允許添加IP別名,就是在一塊物理網(wǎng)卡上綁定多個(gè)lP地址。這樣就能夠在使用單一網(wǎng)卡的同一個(gè)服務(wù)器上運(yùn)行多個(gè)基于IP的虛擬主機(jī)。
3.1?應(yīng)用場(chǎng)景
一臺(tái)nginx服務(wù)器綁定兩個(gè)ip:192.168.78.132、192.168.78.133,訪問(wèn)不同的ip請(qǐng)求不同的html目錄,即:
訪問(wèn)http://192.168.78.132將訪問(wèn)html132目錄下的html網(wǎng)頁(yè)
訪問(wèn)http://192.168.78.133將訪問(wèn)html133目錄下的html網(wǎng)頁(yè)
3.2?準(zhǔn)備環(huán)境
創(chuàng)建192.168.78.132 的虛擬機(jī),保證本地電腦和虛擬網(wǎng)絡(luò)通暢。在192.168.78.132上安裝nginx。這個(gè)之前講過(guò)nginx 的源碼安裝,大家可以去看看這篇文章:https://www.cnblogs.com/zhangweizhong/p/11378512.html
3.3?配置基于ip的虛擬主機(jī)
i. 綁定多ip
步驟1:修改網(wǎng)絡(luò)配置文件,進(jìn)入到/etc/sysconfig/network-scripts,編輯ifcfg-ens33文件如下:
TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=no# BOOTPROTO=dhcp 注意區(qū)別!!!DEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens33UUID=26c2f3f8-62c5-4571-80e2-ca394cfd43daDEVICE=ens33ONBOOT=yesZONE=public# 注意區(qū)別IPADDR0=192.168.78.132PREFIX0=24IPADDR1=192.168.78.133PREFIX1=16
步驟2:保存修改,重啟網(wǎng)絡(luò)
[]ii. 創(chuàng)建兩個(gè)web網(wǎng)站
進(jìn)入/usr/local/nginx 目錄,將原來(lái)nginx的html目錄拷貝兩個(gè)目錄 “html132”和“html133”,為了方便測(cè)試需要修改每個(gè)目錄下的index.html內(nèi)容使之個(gè)性化。
cd /usr/local/nginxcp -r html html132cp -r html html133iii. 配置虛擬主機(jī)
修改/usr/local/nginx/conf/nginx.conf文件,添加兩個(gè)虛擬主機(jī),如下:
#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024;}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;#配置虛擬主機(jī)192.168.78.132server {#監(jiān)聽(tīng)的ip和端口,配置192.168.78.132:80listen 80;#虛擬主機(jī)名稱這里配置ip地址server_name 192.168.78.132;#所有的請(qǐng)求都以/開(kāi)始,所有的請(qǐng)求都可以匹配此locationlocation / {#使用root指令指定虛擬主機(jī)目錄即網(wǎng)頁(yè)存放目錄#比如訪問(wèn)http://ip/test.html將找到/usr/local/html3/test.html#比如訪問(wèn)http://ip/item/test.html將找到/usr/local/html3/item/test.htmlroot /usr/local/nginx/html132;#指定歡迎頁(yè)面,按從左到右順序查找index index.html index.htm;}}#配置虛擬主機(jī)192.168.78.133server {listen 80;server_name 192.168.78.133;location / {root /usr/local/nginx/html133;index index.html index.htm;}}}
iv. 測(cè)試
重新啟動(dòng)nginx,分別訪問(wèn)上面配置的兩個(gè)ip地址,觀察頁(yè)面的返回情況。
訪問(wèn)http://192.168.78.132/

訪問(wèn)http://192.168.78.133/

可以看到,訪問(wèn)不同的ip,nginx轉(zhuǎn)發(fā)的是不同的網(wǎng)站。
04配置基于端口的虛擬主機(jī)前面講了如何配置基于IP的虛擬主機(jī),今天就來(lái)講講Nginx如何基于端口的虛擬主機(jī)。
4.1?應(yīng)用場(chǎng)景
nginx對(duì)外提供81和82兩個(gè)端口監(jiān)聽(tīng)服務(wù)。
訪問(wèn)http://192.168.78.132:81端口則請(qǐng)求html81目錄下的html
請(qǐng)求http://192.168.78.132:82端口則請(qǐng)求html82目錄下的html
4.2?環(huán)境準(zhǔn)備
1. 創(chuàng)建192.168.78.132虛擬機(jī),保證本地電腦和虛擬網(wǎng)絡(luò)通暢。
2. 在192.168.78.132上安裝nginx。
4.3?配置基于端口的虛擬主機(jī)
步驟1:創(chuàng)建html目錄
將原來(lái)nginx的html目錄拷貝兩個(gè)目錄:html81和html82,為了方便測(cè)試需要修改每個(gè)目錄下的index.html內(nèi)容不一樣。
?
步驟2:配置虛擬主機(jī)
修改/usr/local/nginx/conf/nginx.conf文件,添加兩個(gè)虛擬主機(jī)
#user nobody;worker_processes 1;events {worker_connections 1024;}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;#配置虛擬主機(jī)server {#監(jiān)聽(tīng)的ip和端口,配置80listen 80;#虛擬主機(jī)名稱這里配置ip地址server_name 192.168.101.3;#所有的請(qǐng)求都以/開(kāi)始,所有的請(qǐng)求都可以匹配此locationlocation / {#使用root指令指定虛擬主機(jī)目錄即網(wǎng)頁(yè)存放目錄#比如訪問(wèn)http://ip/test.html將找到/usr/local/html3/test.html#比如訪問(wèn)http://ip/item/test.html將找到/usr/local/html3/item/test.htmlroot /usr/local/nginx/html80;#指定歡迎頁(yè)面,按從左到右順序查找index index.html index.htm;}}#配置虛擬主機(jī)server {listen 8080;server_name 192.168.101.3;location / {root /usr/local/nginx/html8080;index index.html index.htm;}}}
4.4?驗(yàn)證測(cè)試
重新加載配置nginx配置文件,查看端口監(jiān)聽(tīng)狀態(tài):
訪問(wèn)http://192.168.78.132:81

?
訪問(wèn)http://192.168.78.132:82
?
?
以上,就把nginx 基于ip的配置虛擬主機(jī)講完了。后面會(huì)繼續(xù)講基于域名配置虛擬主機(jī)。
05基于域名配置虛擬主機(jī)5.1?應(yīng)用場(chǎng)景
兩個(gè)域名指向同一臺(tái)nginx服務(wù)器,用戶訪問(wèn)不同的域名顯示不同的網(wǎng)頁(yè)內(nèi)容。
兩個(gè)域名是aaa.test.com和bbb.test.com
nginx服務(wù)器使用虛擬機(jī)192.168.78.132
?
5.2 準(zhǔn)備環(huán)境
1. 創(chuàng)建192.168.78.132虛擬機(jī),保證本地電腦和虛擬網(wǎng)絡(luò)通暢。
2. 在192.168.78.132上安裝nginx。
3. 通過(guò)host文件指定aaa.test.com和bbb.test.com對(duì)應(yīng)192.168.78.132虛擬機(jī):
修改window的hosts文件:(C:\Windows\System32\drivers\etc)
192.168.78.132 aaa.test.com192.168.78.132 bbb.test.com
?
5.3?配置虛擬主機(jī)
步驟1:html目錄創(chuàng)建
1. 在192.168.78.132上創(chuàng)建/usr/local/aaa_html,此目錄為aaa.test.com域名訪問(wèn)的目錄
2. 在192.168.78.132上創(chuàng)建/usr/local/bbb_html,此目錄為bbb.test.com域名訪問(wèn)的目錄
3. 將/usr/local/nginx/html中的內(nèi)容拷貝分別拷貝到上邊兩個(gè)目錄中,為了方便測(cè)試需要修改每個(gè)目錄下的index.html內(nèi)容使之個(gè)性化。
?
步驟2:修改配置文件
修改/usr/local/nginx/conf/nginx.conf文件,添加兩個(gè)虛擬主機(jī),如下:
#配置虛擬主機(jī)aaa.test.comserver {#監(jiān)聽(tīng)的ip和端口,配置本機(jī)ip和端口listen 192.168.78.132:80;#虛擬主機(jī)名稱是aaa.test.com,請(qǐng)求域名aaa.test.com的url將由此server配置解析server_name aaa.test.com;#所有的請(qǐng)求都以/開(kāi)始,所有的請(qǐng)求都可以匹配此locationlocation / {#使用root指令指定虛擬主機(jī)目錄即網(wǎng)頁(yè)存放目錄#比如訪問(wèn)http://ip/test.html將找到/usr/local/aaa_html/test.html#比如訪問(wèn)http://ip/item/test.html將找到/usr/local/aaa_html/item/test.htmlroot /usr/local/aaa_html;#指定歡迎頁(yè)面,按從左到右順序查找index index.html index.htm;}}#配置虛擬主機(jī)bbb.test.comserver {listen 192.168.78.132:80;server_name bbb.test.com;location / {root /usr/local/bbb_html;index index.html index.htm;}}
?
5.4?驗(yàn)證測(cè)試
分別訪問(wèn)aaa.test.com、bbb.test.com,看效果如何:?
?

?
以上, 就把nginx基于域名的虛擬主機(jī)配置說(shuō)完了。通過(guò)這三篇文章,介紹了nginx配置虛擬主機(jī)的三種方式,分別是基于ip 的虛擬主機(jī)配置,基于端口的虛擬主機(jī)配置和基于域名的虛擬主機(jī)配置。
其實(shí)Nginx最常用的還是基于域名的虛擬主機(jī)配置。
6.1?什么是反向代理
正向代理:通常的代理服務(wù)器,只用于代理內(nèi)部網(wǎng)絡(luò)對(duì)Internet的連接請(qǐng)求,客戶機(jī)必須指定代理服務(wù)器,并將本來(lái)要直接發(fā)送到Web服務(wù)器上的http請(qǐng)求發(fā)送到代理服務(wù)器中由代理服務(wù)器向Internet上的web服務(wù)器發(fā)起請(qǐng)求,最終達(dá)到客戶機(jī)上網(wǎng)的目的。這就是所謂的正向代理,一般就直接叫代理。
反向代理(Reverse Proxy):則是指以代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)反向代理服務(wù)器。
Nginx 只做請(qǐng)求的轉(zhuǎn)發(fā),后臺(tái)有多個(gè)http服務(wù)器提供服務(wù),nginx的作用就是把請(qǐng)求轉(zhuǎn)發(fā)給后面的服務(wù)器,決定吧請(qǐng)求轉(zhuǎn)發(fā)給誰(shuí)處理。如下圖:

6.2?環(huán)境準(zhǔn)備
兩個(gè)tomcat服務(wù)通過(guò)nginx反向代理,本例子使用三臺(tái)虛擬機(jī)進(jìn)行測(cè)試,
nginx服務(wù)器:192.168.78.132
tomcat1服務(wù)器:192.168.78.134
tomcat2服務(wù)器:192.168.78.135
如下圖:

1. 兩臺(tái) tomcat 服務(wù)器,我這里使用的是使用apache-tomcat-7.0.57版本,在192.168.78.134和192.168.78.135虛擬機(jī)上啟動(dòng)tomcat。
2. Nginx 服務(wù)器,這個(gè)之前安裝過(guò),ip地址是:192.168.78.132
3. 修改兩個(gè)tomcat下的webapps/ROOT/index.jsp的內(nèi)容,使用tomcat1和tomcat2兩個(gè)服務(wù)首頁(yè)顯示不同的內(nèi)容。
4. 通過(guò)host文件指定aaa.test.com和bbb.test.com對(duì)應(yīng)192.168.78.132虛擬機(jī):修改window的hosts文件:(C:\Windows\System32\drivers\etc)
192.168.78.132 aaa.test.com192.168.78.132 bbb.test.com6.3?配置Nginx反向代理
根據(jù)上邊的需求在nginx.conf文件中配置反向代理,如下:
#配置一個(gè)代理即tomcat1服務(wù)器upstream tomcat_server1 {server 192.168.78.134:8080;}#配置一個(gè)代理即tomcat2服務(wù)器upstream tomcat_server2 {server 192.168.78.135:8080;}#配置一個(gè)虛擬主機(jī)server {listen 80;server_name aaa.test.com;location / {#域名aaa.test.com的請(qǐng)求全部轉(zhuǎn)發(fā)到tomcat_server1即tomcat1服務(wù)上proxy_pass http://tomcat_server1;#歡迎頁(yè)面,按照從左到右的順序查找頁(yè)面index index.jsp index.html index.htm;}}server {listen 80;server_name bbb.test.com;location / {#域名bbb.test.com的請(qǐng)求全部轉(zhuǎn)發(fā)到tomcat_server2即tomcat2服務(wù)上proxy_pass http://tomcat_server2;index index.jsp index.html index.htm;}}
6.4?驗(yàn)證測(cè)試
分別訪問(wèn)aaa.test.com、bbb.test.com測(cè)試反向代理。


通過(guò)上面的截圖可以看出:
請(qǐng)求訪問(wèn)aaa.test.com通過(guò)nginx代理訪問(wèn)tomcat1,
請(qǐng)求訪問(wèn)bbb.test.com通過(guò)nginx代理訪問(wèn)tomcat2。
以上,就把如何配置nginx和tomcat實(shí)現(xiàn)反向代理講完了。雖然步驟比較多,但是操作起來(lái)還是比較簡(jiǎn)單的。
07配置實(shí)現(xiàn)負(fù)載均衡7.1?什么是負(fù)載均衡
負(fù)載均衡(Load Balance)是建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種廉價(jià)有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。
其實(shí)說(shuō)白了就是將請(qǐng)求分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行執(zhí)行,例如Web服務(wù)器、FTP服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等,從而共同完成工作任務(wù)。

?
7.2 實(shí)現(xiàn)方案
???????? nginx作為負(fù)載均衡服務(wù)器,用戶請(qǐng)求先到達(dá)nginx,再由nginx根據(jù)負(fù)載配置將請(qǐng)求轉(zhuǎn)發(fā)至 tomcat服務(wù)器。
???????? nginx負(fù)載均衡服務(wù)器:192.168.78.132
???????? tomcat1服務(wù)器:192.168.78.134
???????? tomcat2服務(wù)器:192.168.78.135
?
7.3?環(huán)境準(zhǔn)備
1. 兩臺(tái) tomcat 服務(wù)器,我這里使用的是使用apache-tomcat-7.0.57版本,在192.168.78.134和192.168.78.135虛擬機(jī)上啟動(dòng)tomcat。
2. Nginx 服務(wù)器,這個(gè)之前安裝過(guò),ip地址是:192.168.78.132
3. 修改兩個(gè)tomcat下的webapps/ROOT/index.jsp的內(nèi)容,使用tomcat1和tomcat2兩個(gè)服務(wù)首頁(yè)顯示不同的內(nèi)容。
4. 通過(guò)host文件指定aaa.test.com的域名解析,對(duì)應(yīng)192.168.78.132虛擬機(jī):修改window的hosts文件:(C:\Windows\System32\drivers\etc)
192.168.78.132 aaa.test.com7.4?配置實(shí)現(xiàn)負(fù)載均衡
根據(jù)上邊的需求在nginx.conf文件中的http節(jié)點(diǎn)添加如下配置:
upstream tomcat_server_pool{server 192.168.101.5:8080 weight=10;server 192.168.101.6:8080 weight=10;}server {listen 80;server_name aaa.test.com;location / {proxy_pass http://tomcat_server_pool;index index.jsp index.html index.htm;}}
相關(guān)參數(shù)說(shuō)明:
down:表示單前的server暫時(shí)不參與負(fù)載
weight :默認(rèn)為1.weight越大,負(fù)載的權(quán)重就越大。
max_fails:允許請(qǐng)求失敗的次數(shù)默認(rèn)為1.當(dāng)超過(guò)最大次數(shù)時(shí),返回proxy_next_upstream 模塊定義的錯(cuò)誤
fail_timeout:max_fails 次失敗后,暫停的時(shí)間。
backup:其它所有的非backup機(jī)器down或者忙的時(shí)候,請(qǐng)求backup機(jī)器。所以這臺(tái)機(jī)器壓力會(huì)最輕。
7.5?驗(yàn)證測(cè)試?
多次請(qǐng)求aaa.test.com,我們會(huì)發(fā)現(xiàn)nginx會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到各個(gè)tomcat服務(wù)器上。


?
以上就將Nginx負(fù)載均衡介紹完了。后面將會(huì)介紹Nginx的高可用。
之前講了如何配置Nginx虛擬主機(jī),最近有些人問(wèn)我Nginx日志相關(guān)的配置的問(wèn)題。
所以,今天就來(lái)說(shuō)說(shuō)如何配置Nginx的日志。?
8.1?日志格式
我們觀察Nginx配置文件的server段,可以看到如下類似信息
#access_log logs/host.access.log main;這說(shuō)明 該server, 它的訪問(wèn)日志的文件是? logs/host.access.log ,
使用的日志格式是”main”格式,除了main格式,你可以自定義其他格式。
?
main格式是什么?
log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';
main格式是我們定義好一種日志的格式,并起個(gè)名字,便于引用。
以上面的例子,main類型的日志,記錄的 remote_addr.... http_x_forwarded_for等選項(xiàng).
?
8.2?定義日志內(nèi)容
日志格式是指日志記錄哪些內(nèi)容和屬性字段。nginx默認(rèn)的日志格式: main,記錄這么幾項(xiàng):
遠(yuǎn)程IP-? 遠(yuǎn)程用戶/用戶時(shí)間 請(qǐng)求方法(如GET/POST) 請(qǐng)求體body長(zhǎng)度 referer來(lái)源信息
http-user-agent?用戶代理/蜘蛛 ,被轉(zhuǎn)發(fā)的請(qǐng)求的原始IP
http_x_forwarded_for?在經(jīng)過(guò)代理時(shí),代理把你的本來(lái)IP加在此頭信息中,傳輸你的原始IP
?
8.3?配置Nginx日志
步驟1:聲明一個(gè)新的log_format并命名 mylog?
log_format mylog '$remote_addr- "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';步驟2:在下面的server/location,我們就可以引用 mylog?
在server段中,這樣來(lái)聲明
server {listen 8080; #端口server_name 192.168.1.204; #域名location / {root /var/www/html;#根目錄index index.html;access_loglogs/access.log mylog;}}
?
步驟3:Nginx允許針對(duì)不同的server做不同的Log ,(有的web服務(wù)器不支持,如lighttp)
access_log logs/access_8080.log mylog;聲明log log位置 log格式;
步驟4:查看日志記錄
nginx日志配置完成后,重啟,查看日志是否生成成功

?
8.4?生產(chǎn)環(huán)境Nginx配置
上面的日志配置也只是簡(jiǎn)單介紹,實(shí)際生產(chǎn)環(huán)境一般是按日期分割存儲(chǔ)的。
具體實(shí)現(xiàn)方式:shell+定時(shí)任務(wù)+nginx信號(hào)管理,完成日志按日期存儲(chǔ)
分析思路
凌晨00:00:01,把昨天的日志重命名,放在相應(yīng)的目錄下。
再USR1信息號(hào)控制nginx重新生成新的日志文件。
實(shí)現(xiàn)步驟
步驟1:增加按日期備份日志的腳本
創(chuàng)建splitlog.sh文件,具體腳本如下:
base_path='/usr/local/nginx/logs'log_path=$(date -d yesterday +"%Y%m")day=$(date -d yesterday +"%d")mkdir -p $base_path/$log_pathmv $base_path/access.log $base_path/$log_path/access_$day.log#echo $base_path/$log_path/access_$day.logkill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
以上腳本來(lái)著互聯(lián)網(wǎng),大家學(xué)習(xí)參照下即可。
?
步驟2:增加定時(shí)任務(wù)
01?00?*?*?*?/xxx/path/splitlog.sh每天0時(shí)1分(建議在02-04點(diǎn)之間,系統(tǒng)負(fù)載小)
?
以上,就把Nginx日志配置介紹完了,是不是很簡(jiǎn)單的。
