Nginx是什么
沒有聽過Nginx?那么一定聽過它的“同行”Apache吧!Nginx同Apache一樣都是一種WEB服務(wù)器?;赗EST架構(gòu)風(fēng)格,以統(tǒng)一資源描述符(Uniform Resources Identifier)URI或者統(tǒng)一資源定位符(Uniform Resources Locator)URL作為溝通依據(jù),通過HTTP協(xié)議提供各種網(wǎng)絡(luò)服務(wù)。
然而,這些服務(wù)器在設(shè)計(jì)之初受到當(dāng)時(shí)環(huán)境的局限,例如當(dāng)時(shí)的用戶規(guī)模,網(wǎng)絡(luò)帶寬,產(chǎn)品特點(diǎn)等局限并且各自的定位和發(fā)展都不盡相同。這也使得各個(gè)WEB服務(wù)器有著各自鮮明的特點(diǎn)。
Apache的發(fā)展時(shí)期很長,而且是毫無爭(zhēng)議的世界第一大服務(wù)器。它有著很多有點(diǎn):穩(wěn)定、開源、跨平臺(tái)等等。但是由于它出現(xiàn)的時(shí)間太長了。它興起的年代,互聯(lián)網(wǎng)產(chǎn)業(yè)遠(yuǎn)比不上現(xiàn)在。所以它被設(shè)計(jì)為一個(gè)重量級(jí)的。不支持高并發(fā)的服務(wù)器。在Apache上運(yùn)行數(shù)以萬計(jì)的并發(fā)訪問,會(huì)導(dǎo)致服務(wù)器消耗大量?jī)?nèi)存。操作系統(tǒng)對(duì)其進(jìn)行進(jìn)程或線程間的切換也消耗了大量的CPU資源,導(dǎo)致HTTP請(qǐng)求的平均響應(yīng)速度降低。
這些都決定了Apache不可能成為高性能WEB服務(wù)器,輕量級(jí)高并發(fā)服務(wù)器Nginx和Lighttpd就應(yīng)運(yùn)而生了。
Nginx產(chǎn)生
又是拜大神的時(shí)候了,這次被選中的人是俄羅斯的工程師Igor Sysoev,他在為Rambler Media工作期間,使用C語言開發(fā)了Nginx。Nginx作為WEB服務(wù)器一直為Rambler Media提供出色而又穩(wěn)定的服務(wù)。
然后呢,Igor Sysoev將Nginx代碼開源,并且賦予自由軟件許可證。
由于:
Nginx使用基于事件驅(qū)動(dòng)架構(gòu),使得其可以支持?jǐn)?shù)以百萬級(jí)別的TCP連接
高度的模塊化和自由軟件許可證是的第三方模塊層出不窮(這是個(gè)開源的時(shí)代啊~)
Nginx是一個(gè)跨平臺(tái)服務(wù)器,可以運(yùn)行在Linux, FreeBSD, Solaris, AIX, Mac OS, Windows等操作系統(tǒng)上
這些優(yōu)秀的設(shè)計(jì)帶來的極大的穩(wěn)定性。
于是,duang的一下。Nginx火了。
三大WEB服務(wù)器對(duì)比
lighttpd
Lighttpd是一個(gè)具有非常低的內(nèi)存開銷,cpu占用率低,效能好,以及豐富的模塊等特點(diǎn)。lighttpd是眾多OpenSource輕量級(jí)的web server中較為優(yōu)秀的一個(gè)。支持FastCGI, CGI, Auth,輸出壓縮(output compress), URL重寫, Alias等重要功能。
Lighttpd使用fastcgi方式運(yùn)行PHP,它會(huì)使用很少的PHP進(jìn)程響應(yīng)很大的并發(fā)量。
Fastcgi的優(yōu)點(diǎn)在于:
從穩(wěn)定性上看, fastcgi是以獨(dú)立的進(jìn)程池運(yùn)行來cgi,單獨(dú)一個(gè)進(jìn)程死掉,系統(tǒng)可以很輕易的丟棄,然后重新分配新的進(jìn)程來運(yùn)行邏輯.
從安全性上看, fastcgi和宿主的server完全獨(dú)立, fastcgi怎么down也不會(huì)把server搞垮,
從性能上看, fastcgi把動(dòng)態(tài)邏輯的處理從server中分離出來, 大負(fù)荷的IO處理還是留給宿主server, 這樣宿主server可以一心一意作IO,對(duì)于一個(gè)普通的動(dòng)態(tài)網(wǎng)頁來說, 邏輯處理可能只有一小部分, 大量的圖片等靜態(tài)IO處理完全不需要邏輯程序的參與
從擴(kuò)展性上講, fastcgi是一個(gè)中立的技術(shù)標(biāo)準(zhǔn), 完全可以支持任何語言寫的處理程序php,Java,Python
Apache
apache是世界排名第一的web服務(wù)器, 根據(jù)netcraft所作的調(diào)查,世界上百分之五十以上的web服務(wù)器在使用apache.
1995年4月, 最早的apache(0.6.2版)由apache group公布發(fā)行.apache group是一個(gè)完全通過internet進(jìn)行運(yùn)作的非盈利機(jī)構(gòu), 由它來決定apache web服務(wù)器的標(biāo)準(zhǔn)發(fā)行版中應(yīng)該包含哪些內(nèi)容. 準(zhǔn)許任何人修改隱錯(cuò), 提供新的特征和將它移植到新的平臺(tái)上, 以及其它的工作. 當(dāng)新的代碼被提交給apache group時(shí), 該團(tuán)體審核它的具體內(nèi)容, 進(jìn)行測(cè)試 如果認(rèn)為滿意, 該代碼就會(huì)被集成到apache的主要發(fā)行版中。
apache 的特性:
幾乎可以運(yùn)行在所有的計(jì)算機(jī)平臺(tái)上
支持最新的http/1.1協(xié)議
簡(jiǎn)單而且強(qiáng)有力的基于文件的配置(httpd.conf)
支持通用網(wǎng)關(guān)接口(cgi)
支持虛擬主機(jī)
支持http認(rèn)證
集成perl
集成的代理服務(wù)器
可以通過web瀏覽器監(jiān)視服務(wù)器的狀態(tài), 可以自定義日志
支持服務(wù)器端包含命令(ssi)
支持安全socket層(ssl)
具有用戶會(huì)話過程的跟蹤能力
支持fastcgi
支持Java
Nginx
Nginx是俄羅斯人編寫的十分輕量級(jí)的HTTP服務(wù)器,Nginx,它的發(fā)音為“engine X”, 是一個(gè)高性能的HTTP和反向代理服務(wù)器,同時(shí)也是一個(gè)IMAP/POP3/SMTP 代理服務(wù)器.Nginx是由俄羅斯人 Igor Sysoev為俄羅斯訪問量第二的 Rambler.ru站點(diǎn)開發(fā).
Nginx以事件驅(qū)動(dòng)的方式編寫,所以有非常好的性能,同時(shí)也是一個(gè)非常高效的反向代理、負(fù)載平衡。其擁有匹配 Lighttpd的性能,同時(shí)還沒有Lighttpd的內(nèi)存泄漏問題,而且Lighttpd的mod_proxy也有一些問題并且很久沒有更新。但是Nginx并不支持cgi方式運(yùn)行,原因是可以減少因此帶來的一些程序上的漏洞。所以必須使用FastCGI方式來執(zhí)行PHP程序。
nginx做為HTTP服務(wù)器,有以下幾項(xiàng)基本特性:
處理靜態(tài)文件,索引文件以及自動(dòng)索引;打開文件描述符緩沖
無緩存的反向代理加速,簡(jiǎn)單的負(fù)載均衡和容錯(cuò)
FastCGI,簡(jiǎn)單的負(fù)載均衡和容錯(cuò)
模塊化的結(jié)構(gòu)。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理服務(wù)器處理單頁中存在的多個(gè)SSI,則這項(xiàng)處理可以并行運(yùn)行,而不需要相互等待。
Nginx專為性能優(yōu)化而開發(fā),性能是其最重要的考量,實(shí)現(xiàn)上非常注重效率。它支持內(nèi)核Poll模型,能經(jīng)受高負(fù)載的考驗(yàn),有報(bào)告表明能支持高達(dá) 50,000個(gè)并發(fā)連接數(shù)。
Nginx具有很高的穩(wěn)定性。其它HTTP服務(wù)器,當(dāng)遇到訪問的峰值,或者有人惡意發(fā)起慢速連接時(shí),也很可能會(huì)導(dǎo)致服務(wù)器物理內(nèi)存耗盡頻繁交換,失去響應(yīng),只能重啟服務(wù)器。例如當(dāng)前apache一旦上到200個(gè)以上進(jìn)程,web響應(yīng)速度就明顯非常緩慢了。而Nginx采取了分階段資源分配技術(shù),使得它的CPU與內(nèi)存占用率非常低。nginx官方表示保持10,000個(gè)沒有活動(dòng)的連接,它只占2.5M內(nèi)存,所以類似DOS這樣的攻擊對(duì)nginx來說基本上是毫無用處的。就穩(wěn)定性而言,nginx比lighthttpd更勝一籌。
Nginx支持熱部署。它的啟動(dòng)特別容易, 并且?guī)缀蹩梢宰龅?*24不間斷運(yùn)行,即使運(yùn)行數(shù)個(gè)月也不需要重新啟動(dòng)。你還能夠在不間斷服務(wù)的情況下,對(duì)軟件版本進(jìn)行進(jìn)行升級(jí)。

Nginx的安裝
模塊依賴性Nginx需要依賴下面3個(gè)包
gzip 模塊需要 zlib 庫 (點(diǎn)擊下載)
rewrite 模塊需要 pcre 庫 (點(diǎn)擊下載)
ssl 功能需要 openssl 庫 (點(diǎn)擊下載)
Nginx包下載:http://nginx.org/en/download.html
依賴包安裝順序依次為:openssl、zlib、pcre, 最后安裝Nginx包。
圖解教程
第一步: 下載安裝所需包,并上傳到linux服務(wù)器上
openssl-fips-2.0.2.tar.gz
zlib-1.2.7.tar.gz
pcre-8.21.tar.gz
nginx-1.2.6.tar.gz
第二步:依次安裝
1.安裝openssl-fips-2.0.2.tar.gz
[root@localhost mrms]# tar -zxvf openssl-fips-2.0.2.tar.gz
?[root@localhost mrms]# cd openssl-fips-2.0.2
[root@localhost openssl-fips-2.0.2]# ./config?
[root@localhost openssl-fips-2.0.2]# make
[root@localhost openssl-fips-2.0.2]# make install
2.安裝zlib-1.2.7.tar.gz
[root@localhost mrms]# tar -zxvf zlib-1.2.7.tar.gz
[root@localhost mrms]# cd zlib-1.2.7
[root@localhost zlib-1.2.7]# ./configure?
[root@localhost zlib-1.2.7]# make
[root@localhost zlib-1.2.7]# make install
3.安裝pcre-8.21.tar.gz
[root@localhost mrms]# tar -zxvf pcre-8.21.tar.gz
[root@localhost mrms]# cd pcre-8.21
[root@localhost pcre-8.21]# ./configure?
[root@localhost pcre-8.21]# make
[root@localhost pcre-8.21]# make install
4.安裝 nginx-1.2.6.tar.gz
[root@localhost mrms]# tar -zxvf nginx-1.2.6.tar.gz
?[root@localhost mrms]# cd nginx-1.2.6
[root@localhost nginx-1.2.6]# ./configure --with-pcre=../pcre-8.21 --with-zlib=../zlib-1.2.7 --with-openssl=../openssl-fips-2.0.2
[root@localhost nginx-1.2.6]# make[root@localhost nginx-1.2.6]# make install
至此Nginx的安裝完成!
第三步:檢測(cè)是否安裝成功
[root@localhost nginx-1.2.6]# cd? /usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -t
出現(xiàn)如下所示提示,表示安裝成功

安裝成功提示
啟動(dòng)nginx
[root@localhost sbin]# ./nginx
查看端口
[root@localhost sbin]# netstat -ntlp
結(jié)果如下

查看結(jié)果
四、nginx配置:
nginx的配置會(huì)比tomcat復(fù)雜,因?yàn)閠omcat只需要解壓后即可使用,nginx需要先進(jìn)行安裝,安裝時(shí)還需要檢查依賴環(huán)境,所以需要虛擬機(jī)可以訪問互聯(lián)網(wǎng),由于這里L(fēng)inux使用的host-only的網(wǎng)絡(luò)連接方式,需要進(jìn)行部分操作方可訪問外部網(wǎng)絡(luò)。
host-only連接外部網(wǎng)絡(luò)(VirtualBox):
a、VirtualBox會(huì)在本機(jī)的網(wǎng)絡(luò)中新建出一個(gè)虛擬網(wǎng)卡用于充當(dāng)虛擬機(jī)的網(wǎng)關(guān),將該虛擬網(wǎng)卡設(shè)置為自動(dòng)獲取IP地址,然后將本機(jī)連接互聯(lián)網(wǎng)的網(wǎng)卡為虛擬網(wǎng)卡設(shè)置共享,這個(gè)時(shí)候會(huì)為虛擬網(wǎng)卡自動(dòng)分配一個(gè)指定的IP地址,可進(jìn)行修改(修改為Linux的網(wǎng)段網(wǎng)關(guān),如:Linux 192.168.164.100 則 192.168.164.1)
b、修改Linux網(wǎng)絡(luò)配置文件 vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
bootproto=static
HWADDR=08:00:27:b2:63:05? ? # HWADDR為虛擬機(jī)的MAC地址(可通過ifconfig查詢到)
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
GATEWAY=192.168.164.1
IPADDR=192.168.164.100? ?# IPADDR為本機(jī)IP?
NETMASK=255.255.255.0
UUID=d5d33b45-959d-4f17-a101-d630b316179c,
GATEWAY為虛擬網(wǎng)卡的IP(即虛擬機(jī)網(wǎng)關(guān)地址),
vim /etc/resolv.conf 增加 nameserver 192.168.164.1(虛擬機(jī)網(wǎng)關(guān)地址)
c、systemctl restart network,重啟網(wǎng)絡(luò)服務(wù),使用虛擬機(jī)ping www.baidu.com 看是否能連通外部網(wǎng)絡(luò)
當(dāng)虛擬機(jī)可以訪問外部網(wǎng)絡(luò)后,進(jìn)行nginx的安裝,首先將nginx解壓到/usr/local/nginx目錄下 tar -xvf nginx-1.13.0.tar.gz -C /usr/local/nginx,然后進(jìn)入到該目錄進(jìn)行nginx的安裝和配置
a、./nginx-1.13.0/configure -prefix=/usr/local/nginx(-prefix=/usr/local/nginx為指定檢查依賴環(huán)境后nginx的安裝位置)
b、運(yùn)行后會(huì)檢查出缺少gcc、pcre、zlib環(huán)境,依次yum install gcc-c++,yum install pcre-devel,yum install zlib-devel 或者一句指令安裝依賴環(huán)境
c、依賴環(huán)境檢查完成后 make && make install 即可安裝好nginx
d、./sbin/nginx 啟動(dòng)nginx服務(wù),可通過ps -ef | grep nginx 查看nginx啟動(dòng)情況,然后通過本機(jī)訪問http://192.168.164.100:80(nginx默認(rèn)80端口)
e、修改nginx配置文件,實(shí)現(xiàn)反向代理和負(fù)載均衡? vim conf/nginx.conf
? upstream moral{
? ? ? ? server 192.168.164.100:8080; #tomcat服務(wù)器的IP和端口
? ? ? ? server 192.168.164.100:9080;#tomcat服務(wù)器的IP和端口
? ? ? ? }
#(增加處)
? ? ? server {
? ? ? ? listen? ? ? 80;
? ? ? ? server_name? localhost;
? ? ? ? #charset koi8-r;
? ? ? ? #access_log? logs/host.access.log? main;
? ? ? ? location / {
? ? ? ? ? ? #root? html;
? ? ? ? ? ? #index? index.html index.htm;
? ? ? ? ? ? proxy_pass http://moral;
? ? ? ? }
#(修改處)
? ? ? ? #error_page? 404? ? ? ? ? ? ? /404.html;
? ? ? ? # redirect server error pages to the static page /50x.html
? ? ? ? #
? ? ? ? error_page? 500 502 503 504? /50x.html;
? ? ? ? location = /50x.html {
? ? ? ? ? ? root? html;
? ? ? ? }
? ? ? ? # proxy the PHP scripts to Apache listening on 127.0.0.1:80
? ? ? ? #
? ? ? ? #location ~ \.php$ {
? ? ? ? #? ? proxy_pass? http://127.0.0.1;
? ? ? ? #}
? ? ? ? # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
? ? ? ? #
? ? ? ? #location ~ \.php$ {
? ? ? ? #? ? root? ? ? ? ? html;
? ? ? ? #? ? fastcgi_pass? 127.0.0.1:9000;
? ? ? ? #? ? fastcgi_index? index.php;
? ? ? ? #? ? fastcgi_param? SCRIPT_FILENAME? /scripts$fastcgi_script_name;
? ? ? ? #? ? include? ? ? ? fastcgi_params;
? ? ? ? #}
? ? ? ? # deny access to .htaccess files, if Apache's document root
? ? ? ? # concurs with nginx's one
? ? ? ? #
? ? ? ? #location ~ /\.ht {
? ? ? ? #? ? deny? all;
? ? ? ? #}
? ? }
f、重啟nginx服務(wù)器 ./sbin/nginx -s reload,再次通過本機(jī)訪問http://192.168.164.100:80 (nginx默認(rèn)端口)可發(fā)現(xiàn)請(qǐng)求會(huì)在兩個(gè)tomcat服務(wù)器之間切換(可通過修改tomcat-2的index.jsp頁面直觀的看出nginx訪問這兩臺(tái)tomcat服務(wù)器的切換操作)
五、關(guān)閉tomcat服務(wù)器和nginx服務(wù)器
nginx服務(wù)器關(guān)閉:
a、ps -ef | grep nginx 查找到nginx服務(wù)啟動(dòng)的進(jìn)程號(hào)
b、kill -quit 進(jìn)程號(hào) 關(guān)閉nginx服務(wù)器
tomcat服務(wù)器關(guān)閉:
a、cd /usr/local/tomcat 切換到tomcat目錄
b、運(yùn)行 ./apache-tomcat-7.0.78/bin/shutdown.sh和./apache-tomcat-7.0.78-2/bin/shutdown.sh關(guān)閉兩臺(tái)tomcat服務(wù)器
六、開始搭建Nginx圖片服務(wù)器
1、效果
例如:圖片通過ftp服務(wù)上傳到/home/ftpuser/www/images目錄下,我想通過訪問Nginx服務(wù)器來訪問ftp目錄下的圖片文件,該url為http://192.168.128.128/images/xxx.jpg。即使用http請(qǐng)求訪問原本需要使用ftp請(qǐng)求才能訪問到的資源文件。(不懂可先看最后圖解測(cè)試)
2、實(shí)現(xiàn)
①需要在nginx/html下創(chuàng)建一個(gè)images文件夾(實(shí)際訪問的不是這個(gè)路徑)
mkdir/usr/local/nginx/html/images
1
②修改nginx/conf/nginx.conf在默認(rèn)的server里再添加一個(gè)location并指定實(shí)際路徑:
location/images/{?
????? root/home/ftpuser/www/; ? #存放圖片的服務(wù)器路徑上一級(jí)
????? autoindexon;
}
修改完后需要重新啟動(dòng)nginx
./sbin/nginx -s reload
1
說明