u Apache:這是中小型Web服務的主流,Web服務器中的老大哥。php
u Nginx:大型網站Web服務的主流,曾經Web服務器中的初生牛犢,現已長大。html
Nginx的分支Tengine(http://tengine.taobao.org/)目前也在飛速發展。前端
u Lighttpd:這是一個不溫不火的優秀Web軟件,社區不活躍,靜態解析效率很高。在Nginx流行前,nginx
它是大併發靜態業務的首選,國內百度貼吧、豆瓣等衆多網站都有Lighttpd奮鬥的身影。c++
u PHP(FastCGI):大中小型網站都會使用,動態網頁語言PHP程序的解析容器。它可配合Apache解析動態程序,不過,這裏的PHP不是FastCGI守護進程模式,而是mod_php5.so(module)。也可配合Nginx解析動態程序,此時的PHP經常使用FastCGI守護進程模式提供服務。(.php)web
u Tomcat:中小企業動態Web服務主流,互聯網Java容器主流(如jsp、do)。apache
u Resin:大型動態Web服務主流,互聯網Java容器主流(如jsp、do)。vim
u IIS(Internet information services):微軟windows下的Web服務軟件(如asp、aspx)windows
若是你據說或使用過Apache軟件,那麼很快就會熟悉Nginx軟件,與Apache軟件相似, Nginx(「engine x」)是一個開源的,支持高性能、高併發的WWW服務器和代理服務軟件。緩存
Nginx因具有高併發(特別是靜態資源)、佔用系統資源少等特性,且功能豐富逐漸流行起來。
在功能應用方面,Nginx不可是一個優秀的web服務軟件,還具備反向代理負載均衡功能和緩存服務功能。在反向代理負載均衡功能方面,它相似與大名鼎鼎的LVS負載均衡及Haproxy等專業的緩存服務軟件。
Nginx能夠運行在UNIX、Linux、BSD、Mac OS X、Solarls,以及Microsoft Windows等操做系統中。隨着Nginx在國內不少大型網站中的穩定高效運行,近兩年它也逐漸被愈來愈多的中小型網站所使用。當前流行的Nginx Web組合被稱爲LNMP或LEMP(即Linux Nginx MySql PHP),其中LEMP裏的E取自Nginx(「engine x」)
Nginx的官網:http://nginx.org/
u 可針對靜態資源高速高併發訪問及緩存
u 可以使用反向代理加速,而且可進行數據緩存
u 具備簡單負載均衡、節點健康檢查和容錯功能
u 支持遠程FastCGI服務的緩存加速
u 支持FastCGI、Uwsgi、SCGI、Memcached Servers的加速和緩存
u 支持SSL、TLS、SNI。
u 具備模塊化的架構:過濾器包括gzip壓縮、ranges支持、chunked響應、XSLT、SSI及圖像縮放等功能。在SSI過濾器中,一個包含多個SSI的頁面,若是經由FastCGI或反向代理處理,可被並行處理。
u 支持高併發:能支持幾萬併發鏈接(特別是靜態小文件業務環境)
u 資源消耗少:在3萬併發鏈接下,開啓10個Nginx線程消耗的內存不到200MB(ab webbenh)
u 能夠作HTTP反向代理及加速緩存、即負載均衡功能,內置對RS節點服務器健康檢查功能,這至關於專業的Haproxy軟件或LVS的功能。
u 具有Squid等專業緩存軟件等的緩存功能。
u 支持異步網絡I/O事件模型epoll(Linux 2.6+)(apache select)
Nginx是一個支持高性能、高併發的Web服務軟件,它具備不少優秀的特性,做爲Web服務器,與Apache相比,Nginx可以支持更多的併發鏈接訪問,但佔用的資源卻更少,效率更高,在功能上也強大了不少,幾乎不遜於Apache。
在反向代理或負載均衡服務方面,Nginx能夠做爲Web服務,PHP等動態服務及Memcached緩存的代理服務器,它具備相似專業代理軟件(如Haproxy)的功能,同時也是一個優秀的郵件代理服務軟件(最先開發這個產品的目的之一就是做爲郵件代理服務)。Nginx的代理功能在逐漸加強。
在web緩存服務方面,Nginx可經過自身的proxy_cache模塊實現類Squid等專業緩存軟件的功能。
Nginx的這三大功能(web服務、反向代理或負載均衡服務、前端業務數據緩存服務)是國內使用Nginx的主要場景,特別是前兩個。
Nginx使用最新的epoll(Linux 2.6內核)和Kqueue(freebsd)異步網絡I/O模型,
而Apache使用的是傳統的select模型,處理大量鏈接的讀寫時,Apache所採用的select網絡I/O模型比較低效。
目前Linux先可以承受高併發訪問的Squid、Memcached軟件採用的都是epoll模型。
Apache select 和Nginx epoll的技術對比
指標 |
select |
epoll |
性能 |
隨着鏈接數的增長性能急劇降低。處理成千上萬併發鏈接數,性能不好 |
隨着鏈接數的增長,性能基本上沒有降低。處理成千上萬併發鏈接時,性能很好。 |
鏈接數 |
鏈接數有限制,處理的最大鏈接數不超過1024,若是要處理的鏈接數超過1024個,則須要修改FD_SETSIZE宏,並從新編譯 |
鏈接數無限制 |
內在處理機制 |
線性輪詢 |
回調callback |
開發複雜性 |
低 |
中 |
cd /server/tools
wget http://nginx.org/download/nginx-1.12.2.tar.gz
[root@web02 ~]# cd /server/tools/ [root@web02 tools]# wget http://nginx.org/download/nginx-1.12.2.tar.gz --2018-02-02 18:26:50-- http://nginx.org/download/nginx-1.12.2.tar.gz Resolving nginx.org... 206.251.255.63, 95.211.80.227, 2001:1af8:4060:a004:21::e3, ... Connecting to nginx.org|206.251.255.63|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 981687 (959K) [application/octet-stream] Saving to: 「nginx-1.12.2.tar.gz」
100%[===================================================>] 981,687 23.8K/s in 43s
2018-02-02 18:27:40 (22.1 KB/s) - 「nginx-1.12.2.tar.gz」 saved [981687/981687] |
yum install -y pcre-devel openssl-devel
[root@web02 tools]# yum install -y pcre-devel openssl-devel |
說明,若是安裝系統沒有安裝兼容程序庫、開發工具的,請安裝一下基礎依賴包
yum install gcc gcc-c++ automake autoconf -y
tar xf nginx-1.12.2.tar.gz
useradd -M -s /sbin/nologin www
[root@web02 tools]# tar xf nginx-1.12.2.tar.gz [root@web02 tools]# ls nginx-1.12.2 nginx-1.12.2.tar.gz |
[root@web02 tools]# useradd -M -s /sbin/nologin www [root@web02 tools]# id www uid=502(www) gid=502(www) groups=502(www) |
./configure --prefix=/application/nginx-1.12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
配置參數說明
--prefix=PATH |
set installation prefix 指定軟件程序安裝的路徑信息 |
--user=USER |
set non-privileged user for worker processes 建立一個虛擬用戶,用於管理nginx服務的worker進程 |
--group=GROUP |
set non-privileged group for worker processes 建立一個虛擬用戶組,用於管理nginx服務的worker進程 |
--with-http_ssl_module |
enable ngx_http_ssl_module 讓nginx服務能夠支持https訪問 |
--with-http_stub_status_module |
enable ngx_http_stub_status_module 便於監控軟件監視nginx服務運行狀態 |
[root@web02 tools]# cd nginx-1.12.2 [root@web02 nginx-1.12.2]# pwd /server/tools/nginx-1.12.2 |
[root@web02 nginx-1.12.2]# ./configure --prefix=/application/nginx-1.12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module |
說明:編譯過程實質是將各類程序語言轉換爲系統能夠識別的二進制信息
make
[root@web02 nginx-1.12.2]# make make -f objs/Makefile make[1]: Entering directory `/server/tools/nginx-1.12.2' …… |
make install
[root@web02 nginx-1.12.2]# make install make -f objs/Makefile install make[1]: Entering directory `/server/tools/nginx-1.12.2' …… |
ln -s /application/nginx-1.12.2/ /application/nginx
[root@web02 nginx-1.12.2]# ln -s /application/nginx-1.12.2/ /application/nginx [root@web02 nginx-1.12.2]# cd /application/ [root@web02 application]# ll total 4 lrwxrwxrwx 1 root root 26 Feb 2 19:30 nginx -> /application/nginx-1.12.2/ drwxr-xr-x 6 root root 4096 Feb 2 19:28 nginx-1.12.2 |
/application/nginx/sbin/nginx
[root@web02 application]# /application/nginx/sbin/nginx |
[root@web02 application]# ps -ef |grep nginx root 4781 1 0 19:32 ? 00:00:00 nginx: master process /application/nginx/sbin/nginx www 4782 4781 0 19:32 ? 00:00:00 nginx: worker process root 4784 2022 1 19:32 pts/0 00:00:00 grep nginx [root@web02 application]# netstat -lntup |grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4781/nginx |
說明:master進程表示nginx主進程,負責nginx服務的啓動 中止等操做
worker進程表示真正處理用戶請求的進程
1. 依賴包軟件沒有安裝
2. 啓動Nginx時以下報錯「nginx:[emerg]getpwnam(「nginx」)failed」
解答:這是由於沒有對應的Nginx服務用戶,執行useradd nginx -s /sbin/nologin -M建立Nginx用戶便可。
3. 如何查看Nginx編譯時的參數?
解答:可採用以下命令查看:/application/nginx/sbin/nginx -V
[root@web02 application]# /application/nginx/sbin/nginx -V nginx version: nginx/1.12.2 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --prefix=/application/nginx-1.12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module |
[root@web02 nginx]# ll total 36 drwx------ 2 www root 4096 Feb 2 19:32 client_body_temp drwxr-xr-x 2 root root 4096 Feb 2 19:28 conf ---配置文件目錄 drwx------ 2 www root 4096 Feb 2 19:32 fastcgi_temp drwxr-xr-x 2 root root 4096 Feb 2 19:28 html ---站點目錄 drwxr-xr-x 2 root root 4096 Feb 2 19:32 logs ---日誌目錄 drwx------ 2 www root 4096 Feb 2 19:32 proxy_temp drwxr-xr-x 2 root root 4096 Feb 2 19:28 sbin ---保存服務命令目錄 drwx------ 2 www root 4096 Feb 2 19:32 scgi_temp drwx------ 2 www root 4096 Feb 2 19:32 uwsgi_temp |
mime.types --- 媒體資源類型文件
nginx.conf --- nginx服務主配置文件
grep -Ev "#|^$" nginx.conf.default >nginx.conf
[root@web02 conf]# ll total 60 -rw-r--r-- 1 root root 1077 Feb 2 19:28 fastcgi.conf -rw-r--r-- 1 root root 1077 Feb 2 19:28 fastcgi.conf.default -rw-r--r-- 1 root root 1007 Feb 2 19:28 fastcgi_params -rw-r--r-- 1 root root 1007 Feb 2 19:28 fastcgi_params.default -rw-r--r-- 1 root root 2837 Feb 2 19:28 koi-utf -rw-r--r-- 1 root root 2223 Feb 2 19:28 koi-win -rw-r--r-- 1 root root 3957 Feb 2 19:28 mime.types -rw-r--r-- 1 root root 3957 Feb 2 19:28 mime.types.default -rw-r--r-- 1 root root 484 Feb 2 20:13 nginx.conf -rw-r--r-- 1 root root 2656 Feb 2 19:28 nginx.conf.default -rw-r--r-- 1 root root 636 Feb 2 19:28 scgi_params -rw-r--r-- 1 root root 636 Feb 2 19:28 scgi_params.default -rw-r--r-- 1 root root 664 Feb 2 19:28 uwsgi_params -rw-r--r-- 1 root root 664 Feb 2 19:28 uwsgi_params.default -rw-r--r-- 1 root root 3610 Feb 2 19:28 win-utf [root@web02 conf]# grep -Ev "#|^$" nginx.conf.default >nginx.conf |
[root@web02 conf]# cat nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } |
nginx配置文件區域分類
main區塊
event區塊
http區塊
server區塊(能夠有多個)
location區塊(能夠有多個)
擴展命令說明:
vimdiff nginx.conf nginx.conf.default --- 比較兩個文件之間配置區別
/application/nginx/sbin/nginx -s reload --- -s參數表示一個信號參數,後面能夠指定一些信號信息
信號信息:reload stop
/application/nginx/sbin/nginx -t --- 檢查配置文件語法信息
[root@web02 nginx-1.12.2]# /application/nginx/sbin/nginx -h nginx version: nginx/1.12.2 Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options: -?,-h : this help -v : show version and exit -V : show version and configure options then exit -t : test configuration and exit -T : test configuration, dump it and exit -q : suppress non-error messages during configuration testing -s signal : send signal to a master process: stop, quit, reopen, reload -p prefix : set prefix path (default: /application/nginx-1.12.2/) -c filename : set configuration file (default: conf/nginx.conf) -g directives : set global directives out of configuration file
|
[root@web02 conf]# vim nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name www.wuhuang.com; location / { root html/www; index wuhuang.html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } |
編寫靜態訪問頁面文件信息
[root@web02 www]# pwd /application/nginx/html/www 站點目錄 [root@web02 www]# cat wuhuang.html <html> <meta charset="utf-8"> <head> <title>吾皇</title> </head> <body> 吾皇 <table border=1> <tr> <td>01</td> <td>吾皇</td> </tr> <tr> <td>02</td> <td>巴扎黑</td> </tr> <tr> <td>03</td> <td>糙漢</td> </tr> </table> <a href="http://www.baidu.com
"> <img src="wuhuang.jpg" /> </a> </body> </html> |
[root@web02 www]# ls wuhuang.html wuhuang.jpg |
修改本地的hosts文件
C:\Windows\System32\drivers\etc\hosts
10.0.0.8 www.wuhuang.com
驗證(經過IP地址訪問)
經過域名訪問