nginx網站服務(上)

第1章 web網站服務介紹

1.1 經常使用來提供靜態Web服務的軟件

Apache:這是中小型Web服務的主流,Web服務器中的老大哥。php

Nginx:大型網站Web服務的主流,曾經Web服務器中的初生牛犢,現已長大。html

           Nginx的分支Tenginehttp://tengine.taobao.org/)目前也在飛速發展。前端

Lighttpd:這是一個不溫不火的優秀Web軟件,社區不活躍,靜態解析效率很高。在Nginx流行前,nginx

              它是大併發靜態業務的首選,國內百度貼吧、豆瓣等衆多網站都有Lighttpd奮鬥的身影。c++

1.2 經常使用來提供動態服務的軟件

PHPFastCGI:大中小型網站都會使用,動態網頁語言PHP程序的解析容器。它可配合Apache解析動態程序,不過,這裏的PHP不是FastCGI守護進程模式,而是mod_php5.somodule)。也可配合Nginx解析動態程序,此時的PHP經常使用FastCGI守護進程模式提供服務。(.php)web

Tomcat:中小企業動態Web服務主流,互聯網Java容器主流(如jspdo)。apache

Resin:大型動態Web服務主流,互聯網Java容器主流(如jspdo)。vim

IISInternet information services:微軟windows下的Web服務軟件(如aspaspxwindows

第2章 nginx網站服務軟件

2.1 Nginx是什麼

若是你據說或使用過Apache軟件,那麼很快就會熟悉Nginx軟件,與Apache軟件相似, Nginxengine x)是一個開源的,支持高性能、高併發的WWW服務器和代理服務軟件緩存

Nginx因具有高併發(特別是靜態資源)、佔用系統資源少等特性,且功能豐富逐漸流行起來。

在功能應用方面,Nginx不可是一個優秀的web服務軟件,還具備反向代理負載均衡功能和緩存服務功能。在反向代理負載均衡功能方面,它相似與大名鼎鼎的LVS負載均衡及Haproxy等專業的緩存服務軟件。

Nginx能夠運行在UNIXLinuxBSDMac OS XSolarls,以及Microsoft Windows等操做系統中。隨着Nginx在國內不少大型網站中的穩定高效運行,近兩年它也逐漸被愈來愈多的中小型網站所使用。當前流行的Nginx Web組合被稱爲LNMPLEMP(即Linux Nginx MySql PHP),其中LEMP裏的E取自Nginx(「engine x」)

Nginx的官網:http://nginx.org/

2.2 Nginx的特點及優勢

2.2.1 Nginx的重要特性

可針對靜態資源高速高併發訪問及緩存

可以使用反向代理加速,而且可進行數據緩存

具備簡單負載均衡、節點健康檢查和容錯功能

支持遠程FastCGI服務的緩存加速

支持FastCGIUwsgiSCGIMemcached Servers的加速和緩存

支持SSLTLSSNI

具備模塊化的架構:過濾器包括gzip壓縮、ranges支持、chunked響應、XSLTSSI及圖像縮放等功能。在SSI過濾器中,一個包含多個SSI的頁面,若是經由FastCGI或反向代理處理,可被並行處理。

2.2.2 Nginx HTTP服務器的特點及優勢(重要)

支持高併發:能支持幾萬併發鏈接(特別是靜態小文件業務環境)

資源消耗少:在3萬併發鏈接下,開啓10Nginx線程消耗的內存不到200MBab webbenh

能夠作HTTP反向代理及加速緩存、即負載均衡功能,內置對RS節點服務器健康檢查功能,這至關於專業的Haproxy軟件或LVS的功能。

具有Squid等專業緩存軟件等的緩存功能。

支持異步網絡I/O事件模型epollLinux 2.6+)(apache select

2.3 Nginx軟件的主要企業功能應用

2.3.1 做爲Web服務軟件

Nginx是一個支持高性能、高併發的Web服務軟件,它具備不少優秀的特性,做爲Web服務器,與Apache相比,Nginx可以支持更多的併發鏈接訪問,但佔用的資源卻更少,效率更高,在功能上也強大了不少,幾乎不遜於Apache

2.3.2 反向代理或負載均衡服務

在反向代理或負載均衡服務方面,Nginx能夠做爲Web服務,PHP等動態服務及Memcached緩存的代理服務器,它具備相似專業代理軟件(如Haproxy)的功能,同時也是一個優秀的郵件代理服務軟件(最先開發這個產品的目的之一就是做爲郵件代理服務)。Nginx的代理功能在逐漸加強。

2.3.3 前端業務數據緩存服務

web緩存服務方面,Nginx可經過自身的proxy_cache模塊實現類Squid等專業緩存軟件的功能。

Nginx的這三大功能(web服務、反向代理或負載均衡服務、前端業務數據緩存服務)是國內使用Nginx的主要場景,特別是前兩個。

2.4 爲何Nginx整體性能比Apache

Nginx使用最新的epollLinux 2.6內核)和Kqueuefreebsd)異步網絡I/O模型,

Apache使用的是傳統的select模型,處理大量鏈接的讀寫時,Apache所採用的select網絡I/O模型比較低效。

目前Linux先可以承受高併發訪問的SquidMemcached軟件採用的都是epoll模型。

Apache select 和Nginx epoll的技術對比

指標

select

epoll

性能

隨着鏈接數的增長性能急劇降低。處理成千上萬併發鏈接數,性能不好

隨着鏈接數的增長,性能基本上沒有降低。處理成千上萬併發鏈接時,性能很好。

鏈接數

鏈接數有限制,處理的最大鏈接數不超過1024,若是要處理的鏈接數超過1024個,則須要修改FD_SETSIZE宏,並從新編譯

鏈接數無限制

內在處理機制

線性輪詢

回調callback

開發複雜性

第3章 部署nginx軟件(編譯安裝)

3.1 第一個里程碑:進行nginx軟件下載

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.gzsaved [981687/981687]

3.2 第二個里程碑:安裝依賴軟件

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

3.3 第三個里程碑:解壓軟件,建立虛擬用戶,進行編譯安裝(三步曲)

3.3.1 解壓軟件,建立虛擬用戶

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)

3.3.2 編譯第一步:進行配置

./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


3.3.3 編譯第二步:編譯(翻譯)

說明:編譯過程實質是將各類程序語言轉換爲系統能夠識別的二進制信息

make

[root@web02 nginx-1.12.2]# make

make -f objs/Makefile

make[1]: Entering directory `/server/tools/nginx-1.12.2'

……

 

3.3.4 編譯第三步:編譯安裝

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'

……

3.4 第四個里程碑:建立程序目錄軟連接文件

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

3.5 第五個里程碑:網站服務啓動成功

/application/nginx/sbin/nginx

[root@web02 application]# /application/nginx/sbin/nginx          

3.6 第六個里程碑:檢查測試

[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進程表示真正處理用戶請求的進程

第4章 部署nginx軟件可能會遇到的問題  

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          

第5章 nginx軟件程序目錄結構

5.1 nginx軟件程序目錄結構

[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       

 

5.2 配置文件目錄說明

image.png 

mime.types        --- 媒體資源類型文件

nginx.conf        --- nginx服務主配置文件


 image.png

5.3 精簡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    --- 比較兩個文件之間配置區別

5.4 nginx服務命令參數說明

/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

 

 

5.5 實踐配置編寫配置文件

[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地址訪問)

image.png 

經過域名訪問

image.png

相關文章
相關標籤/搜索