1. 程式人生 > >nginx服務企業級應用

nginx服務企業級應用

1.1 常用來提供靜態服務的軟體

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

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

  Nginx 的分支 Tengine ( http://tengine.taobao.org/)目前也在飛速發展•

Lighttpd :這是一個不溫不火的優秀 Web軟體,社群不活躍,靜態解析效率很高.在 Nginx 流行前,它是大併發靜態業務的首選,國內百度貼吧、豆瓣等眾多網站都有Lighttpd奮鬥的身彩"  

1.2 常用來提供動態服務的軟體

* PHP ( FastCGI ):大中小型網站都會使用,動態網頁語言PHP程式的解析容器。它可配合Apache解析動態程式,不過,這裡的PHP不是FastCGI守護程序橫式,而是mod_php5.so ( module)也可配合Nginx解析動態程式,此時的PHP常用FastCGI守護程序模式提供服務。
* Tomcat :中小企業動態Web服務主流,網際網路Java容器主流(如jsp、do )
* Resin :大型動態Web服務主流,網際網路Java容器主流(如jsp、do )
* IIS ( Internet information services ):微軟 windows 下的 Web 服務軟體(如 asp、aspx )

第2章 nginx 軟體

2.1 軟體介紹

如果你聽說或使用過 Apache軟體,那麼很快就會熟悉 Nginx軟體,與 Apache軟體類似, Nginx ( “engme x")是一個開源的,支援高效能、高併發的 WWW伺服器和代理服務軟體。它是由俄羅斯人 Igor Sysoev開發的,最初被應用在勘羅斯的大型網站 www.rambler.ru 上,後來作者將原始碼以類BSD許可證的形式開源出來供全球使用。

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

在功能應用發麵,Nginx不但是一個優秀的Web服務軟體,還具有反向代理負載均衡功能和快取服務功能。在反向代理負載均衡功能方面,它類似於大名鼎鼎的LVS負載均衡及Haproxy等專業代理軟體,但是Nginx部署起來更為簡單、方便;在快取服務功能方面,它又類似於Squid等專業的快取服務軟體。

Nginx 可以執行在 UNIX、Linux、BSD、Mac 0S X、Solaris,以及 Microsoft Windows 等作業系統中。隨著Nginx在國內很多大型網站中的穩定高效執行,近兩年它也逐漸被越來越多的中小型網站所使用。當前流行的Nginx Web組合被稱為LNMP或LEMP(即Linux Nginx MySQL PHP),其中 LNMP 裡的 N 取自Nginx ( "engine x" )

Nginx 的官方介紹見 http://nginx.org/en

2.2 NGINX 軟體特性

2.2.1 HTTP伺服器的特色及優點:

u  支援高併發:能支援幾萬併發連線(特別是靜態小檔案業務環境)

u  資源消耗少:在3萬併發連線下,開啟10個Nginx執行緒消耗的記憶體不到200MB

u  可以做HTTP反向代理及加速快取、即負載均衡功能,內建對RS節點伺服器健康檢查功能,這相當於專業的Haproxy軟體或LVS的功能。

u  具備Squid等專業快取軟體等的快取功能。

u  支援非同步網路I/O事件橫型epoll(Linux2.6+)

2.2.2 nginx功能特性

  • web網站服務
  • 反向代理負載均衡(nginx /lvs /haproxy)
  • nginx快取服務(memcache /redis /mongodb)

2.3 nginx軟體的企業功能應用

業務型別

應用方案

靜態業務

若是高併發場景,儘量採用Nginx或Lighttpd,二者首選Nginx

動態業務

理論上採用Nginx和Apache均可,建議選擇Nginx,為了避免相同業務的服務軟體多樣化,增加額外維護成本。動態業務可以由Nginx兼做前端代理,再根據頁面元素的型別或目錄,轉發到後端相應的伺服器處理程序。

---首選tomcat

既有靜態業務又有動態業務

採用Nginx

利用nginx軟體是無法處理動態業務請求,要讓nginx結合php軟體處理動態業務請求,在加上mysql 即 LNMP架構

2.4 nginx軟體的動態訪問瓶頸

2.4.1 與其他軟體的對比

先來看看Apache軟體的特點,如下

²  Apache2.2版本非常穩定強大,據官方說,Apache2.4版本效能更強。

²  Prefork模式取消了程序建立開銷,效能很高。

²  處理動態業務資料時,因關聯到後端的引擎和資料庫,瓶頸不在Apache上。

²  高併發時消耗系統資源相對多一些。

²  基於傳統的select模型,高併發能力有限。

²  支援擴充套件庫,可通過DSO、apxs方法編譯安裝額外的外掛功能,不需要重新編譯Apache

²  功能多,更穩定,更安全,外掛也多。

²  市場份額在逐年遞減

再來看看Nginx軟體的特點,如下:

n  基於非同步網結I/O模 型(epollk kqueue)

n  具備支援高效能,高併發的特性,併發連線可達數萬。

n  對小檔案(小於1 MB的靜態檔案)高併發支援很好,效能很高

n  不支援類似 Apache的DSO模式、擴充套件庫必須編譯進主程式(缺點)

n  程序佔用系統資源比較低。

n  支援Web、反向Proxy、Cache三大重點功能,幷且都很優秀。

n  市場份額在逐年快速增加。

最後是Lighttpd的特點,如下:

²  基於非同步網路 I/ O模型,效能、併發都與 Nginx相近。

²  擴充套件庫是 SO模式,比Nginx靈活

²  目前國內的使用率比較低,安全性沒有 Apache和Nginx好。

²  通過外掛(mod_secdownload)可實現檔案 URL地址加密(優點)

²  社群不活躍,市場份額較低,

2.4.2 最主要的區別(select & epoll)

NGINX 使用的是epoll 和Kqueue 非同步網路I/O模型,而apache使用的是傳統的select模型

比喻:

 第一個比喻:

 假設你在大學讀書,住的宿舍樓有很多房間,你的朋友要來找你。select版宿管大媽就會帶著你的朋友到各房間挨個去找,直到找到你為止。而epoll版宿管大媽會先記下每位入住同學的房間號,你的朋友來找你時,只需告訴你的朋友你住在哪個房間即可,不用親自帶著你的朋友滿宿舍樓找人了。如果同時來了100個人,都要找自己住這棟樓的同學,select版和epoll版宿管大媽,誰的效率更高,就很明顯了。

第二個比喻:

select的呼叫複雜度是線性的,即O(n)。舉個例子,一個保姆照看照看一群孩子,如果把孩子是否需要尿尿比作網路I/O事件,select的作用就好比這個保姆挨個詢問每個孩子"你要尿尿嗎?”如果孩子回答是,保姆則把孩子領出來放到另外一個地方。當所有孩子詢問完之後,保姆領著這些要尿尿的孩子去上廁所(處理網路I/O事件).在epoll機制下,保姆不再需要挨個詢問每個孩子是否需要尿尿。取而代之的是,如果孩子需要尿尿,他就自己主動站到事先約定好的地方,而保姆的職責就是檢視事先約定好的地方是否有孩子。如果有小孩,則領著孩子去上廁所(網路事件處理)。因此,epoll的這種機制,能夠高效地處理成千上萬的併發連線,並且效能不會隨著連線數増加而下降太多。

2.4.3 apache select和nginx epoll技術對比圖

指標

select

epoll

效能

隨著連線數的增加效能急劇下降。處理成千上萬的併發連線數,效能很差

隨著連線數的增加,效能基本上沒有下降。處理成千上萬連線時效能很好

連線數

連線數有限制,處理的最大連線數不超過1024,如果要處理的連線數超過1024個,則需要修改FD_SETSIZE巨集,並重新編譯

連線數無限制

內在處理機制

線性輪詢

回撥callback

開發複雜性

第3章 nginx的安裝與使用

3.1 nginx軟體的編譯安裝步驟

3.1.1 檢查軟體安裝的系統環境

[[email protected] ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[[email protected] ~]# uname -r
2.6.32-696.el6.x86_64

3.1.2 安裝nginx的依賴包(pcre-devel openssl-devel)

yum install -y pcre-devel openssl-devel

pcre:相容perl語言正則表示式,perl compatible regular expressions

      rewirte模組 引數資訊(perl方式定義正則表示式)

openssl:ssh---openssh/openssl---https

總結:所有安裝依賴軟體,後面都要加上-devel

3.1.3 下載nginx軟體

wget http://nginx.org/download/nginx-1.10.2.tar.gz

說明:軟體很小,用心檢視一下

解壓軟體

tar xf nginx-1.10.2.tar.gz

3.1.4 建立管理使用者 www

useradd -M -s /sbin/nologin www

3.1.5  nginx軟體編譯安裝過程

3.1.5.1  注意

軟體編譯安裝步驟

a>軟體解壓配置(將軟體程式安裝到哪個目錄中 開啟nginx軟體的哪些功能)

b>軟體編譯過程

c>軟體編譯安裝過程

   注意順序,順序不對軟體安裝會出錯

3.1.5.2  編譯安裝軟體

1、配置軟體,在軟體的解壓目錄中

[[email protected] nginx-1.10.2]# ./configure --prefix=/application/nginx-1.10.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module

編譯引數說明:

 --prefix           表示指定軟體安裝到哪個目錄中,指定目錄不存在會自動建立

 --user/--group       nginx工作程序由哪個使用者執行管理

 --with-http_stub_status_module   啟動nginx狀態模組功能(使用者訪問nginx的網路資訊)

 --with-http_ssl_module           啟動https功能模組

通過軟體編譯過程中的返回值是否正確,確認配置是否正確

[[email protected] nginx-1.10.2]# echo $?
0

   2、編譯軟體

[[email protected] nginx-1.10.2]# make

   3、編譯安裝

[[email protected] nginx-1.10.2]# make install

3.1.6 建立軟連線

[[email protected] application]# ln -s /application/nginx-1.10.2/ /application/nginx

3.1.7 精簡化nginx.conf 主配置檔案內容

[[email protected] conf]# egrep -v "#|^$" nginx.conf.default >nginx.conf

3.1.8 啟動程式

[[email protected] application]# /application/nginx/sbin/nginx
[[email protected] application]#

檢查是否啟動

[[email protected] application]# ps -ef |grep nginx
root      26548      1  0 20:13 ?        00:00:00 nginx: master process /application/nginx/sbin/nginx
www       26549  26548  0 20:13 ?        00:00:00 nginx: worker process       
root      26551  23431  3 20:13 pts/0    00:00:00 grep --color=auto nginx

檢查埠資訊

[[email protected] application]# netstat -lntup |grep 80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      26548/nginx 

服務部署完成

至此軟體安裝完畢!

nginx命令簡化方法

echo 'export PATH=/application/nginx/sbin:$PATH'>>/etc/profile
source /etc/profile
which nginx

3.1 nginx 目錄結構

[[email protected] nginx]# ll
total 36
drwxr-xr-x 2 root root 4096 Oct 21 19:34 conf    #配置檔案儲存目錄
drwxr-xr-x 2 root root 4096 Oct 21 19:34 html    #站點目錄
drwxr-xr-x 2 root root 4096 Oct 21 20:26 logs    #nginx 服務相關日誌檔案儲存目錄(錯誤日誌訪問日誌)
drwxr-xr-x 2 root root 4096 Oct 21 19:34 sbin    # 服務命令目錄(只有一個nginx檔案)

3.2 nginx.conf 配置檔案說明

這樣的配置檔案是通過精簡化配置檔案得到!

[[email protected] conf]# cat nginx.conf
worker_processes  1;                        ← worker 程序數量
events {                                    ←事件區塊
    worker_connections  1024;               ←每個worker程序可以處理的連線數
}                                            ←事件區塊結束
http {                                      ← HTTP 區塊
    include       mime.types;               ←支援的媒體檔案
    default_type  application/octet-stream;←預設的媒體型別
    sendfile        on;                     ←高效傳輸模式
    keepalive_timeout  65;                  ←超時時間
    server {                                 ← server 區塊
        listen       80;                    ←埠
        server_name  localhost;             ←域名
        location / {                        ←第一個location區塊
            root   html;                     ←站點目錄
            index  index.html index.htm;     ←首頁檔案
        }                                    ←第一個location區塊結束
        error_page   500 502 503 504  /50x.html;  ← 錯誤資訊配置
        location = /50x.html {                  檔案位置
            root   html;                      在哪找:路徑
        }                                     
    }                                         ← server 區塊結束
}                                            ← HTTP 區塊結束

3.2.1 站點目錄與首頁檔案概 

3.2.2 配置檔案詳解 

3.3 【常見錯誤】nginx軟體的編譯安裝常見錯誤說明

3.3.1 nginx軟體安裝過程中遇到的問題

軟體依賴包未正確安裝問題---PCRE依賴包沒有安裝

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

解決方法:yum install pcre pcre-devel -y

軟體依賴包未正確安裝問題---OPENSSL依賴包沒有安裝

./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.

解決方法:yum install openssl openssl-devel -y

3.3.2 nginx軟體啟動過程中遇到的問題

nginx軟體重複啟動產生的錯誤資訊

[[email protected] nginx-1.10.2]# /application/nginx/sbin/nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

解決方法:

nginx軟體已經啟動無需反覆啟動,如果需要重新啟動需要停止nginx程序或者用reload方式進行重啟

3.3.3 啟動 Nginx 時如下報錯"nginx:[emerg]getpwnam(“nginx”〉failed"

解答這是因為沒有對應的Nginx服務使用者,執行useradd nginx-s/sbin/no丨ogin-M建立 Nginx

使用者即可。為了讓讀者理解問題,重現上述錯誤過程,命令如下:

[[email protected] tools]# pkill nginx
[[email protected] tools]# userdel nginx
[[email protected] tools]# /application/nginx/sbin/nginx
nginx: [emerg] getpwnam(Mnginx") failed
[[email protected] tools]# useradd nginx -s /sbin/nologin -M
[[email protected] tools]# /application/nginx/sbin/nginx

3.3.4 編譯安裝pcre編譯軟體時,gcc不全導致報錯(本文使用yum安裝不存在此問題)。

報錯資訊如下:

[[email protected] pcre-8.30]# make && make install
make all-am
make[l] : Entering directory 7home/gjlin/tools/pcre-8.30'
CXX pcrecpp.lo
libtool : compile : unrecognized option '-DHAVE_CONFIG_H'
libtool : compile : Try 'libtool --help* for more information.
make[l】:*** [pcrecpp.lo】錯誤 1
make[l] : Leaving directory Vhome/gjlin/tools/pcre-8.30'
make : *** [all]錯誤 

解答:執行“yum -y install gcc-c++”命令安裝gcc-c++依賴包。

3.3.5 nginx軟體編譯安裝後,看不到程式目錄(/application)

   說明:編譯安裝步驟不對(配置 編譯 編譯安裝生成/appliation)

3.3.6 nginx軟體排查問題三部曲說明

       a 在客戶端上ping伺服器端IP,檢查鏈路是否通暢

      b 在客戶端上telnet伺服器端IP、埠,檢查鏈路訪問是否通暢

      c 在客戶端上wget檢測模擬頁面訪問是否正常

3.3.7 【注意】403狀態碼出現情況原因

    01. 服務阻止客戶端訪問

    02. 服務端站點目錄中,沒有指定首頁檔案資訊   

3.4 nginx軟體使用命令引數

3.4.1 nginx 啟動方法

[[email protected] application]# /application/nginx/sbin/nginx

3.4.2 nginx 停止方法

[[email protected] application]# /application/nginx/sbin/nginx -s stop

3.4.3 nginx 重啟方法 (平滑重啟)

[[email protected] application]# /application/nginx/sbin/nginx -s reload

3.4.4 檢查配置檔案語法是否正確

[[email protected] application]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

3.4.5 顯示配置引數  -V (大寫V)

[[email protected] application]# /application/nginx/sbin/nginx -V
nginx version: nginx/1.10.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.10.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module

3.4.6 nginx軟體使用過程中深入說明

①. nginx軟體語法檢查方法:

    nginx -t 

②. nginx軟體訪問測試過程:

curl -v www.baidu.com

③. nginx軟體編譯引數檢視:

    nginx -V                 <--- 檢視原有的編譯引數資訊

3.5 nginx軟體靜態頁面編寫過程

編寫配置檔案

[[email protected] www]# cat ../../conf/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.zinx.top;
        location / {
            root   html/www;
            index  clsn.html index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

編寫靜態訪問頁面檔案資訊

[[email protected] www]# cat clsn.html  
<html>
<meta charset="utf-8">
<head>
<title>TEST</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://blog.znix.top">
<img src="znix.png" />
</a>
</body>
</html>

第4章 nginx進階 --虛擬主機配置

4.1 【企業要求】需要按照以前nginx服務編譯安裝過程安裝

1、參看已安裝服務的配置引數資訊

[[email protected] sbin]# /application/nginx/sbin/nginx -V
nginx version: nginx/1.10.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.10.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module

   -V 引數能顯示軟體的詳細詳細,安裝配置引數

2、按照配置引數進行部署

4.1.1 【語法檢查】檢查配置檔案

[[email protected] nginx]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

4.2 首頁檔案不存在--利用nginx服務搭建檔案共享伺服器

通過配置  autoindex on; 引數

使用 autoindex引數,nginx能識別的直接顯示,不識別的直接下載

配置完 autoindex on; 引數以後 會顯示站點下的檔案資訊

對於nginx可以解析的資源會解析相應的內容

對於nginx不可以解析的資源會直接下載

4.2.1 進行curl時,報403錯誤,因為沒有首頁檔案資訊

 [[email protected] ~]# echo 'web01 www' > /application/nginx/html/www/index.html

        <- 在虛擬主機指定的站點目錄中建立首頁檔案         

[[email protected] ~]# curl www.nmtui.com
<- 利用curl命令本地檢測nginx配置是否成功;已經存在首頁檔案,測試成功

4.2.2 autoindex on引數實踐

1)修改配置檔案

[[email protected] www]# cat ../../conf/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       10.0.0.8:80;
        server_name  www.nmtui.com;
        location / {
            root   html/www;
            autoindex on;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

2)重啟服務

[[email protected] conf]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful
[[email protected] conf]# /application/nginx/sbin/nginx -s reload

3)訪問測試 

4.3 【概念】虛擬主機的概念和型別

虛擬主機使用的是特殊的軟硬體技術,它把一臺執行在因特網上的伺服器主機分成一臺臺“虛擬”的主機,每臺虛擬主機都可以是一個獨立的網站,可以具有獨立的域名,具有完整的Intemet伺服器功能(WWW、FTP、Email等),同一臺主機上的虛擬主機之間是完全獨立的。從網站訪問者來看,每一臺虛擬主機和一臺獨立的主機完全一樣。

利用虛擬主機,不用為每個要執行的網站提供一臺單獨的Nginx伺服器或單獨執行一組Nginx程序。虛擬主機提供了在同一臺伺服器、同一組Nginx程序上執行多個網站的功能。

 

4.3.1 虛擬主機概念

所謂虛擬主機,在Web服務裡就是一個獨立的網站站點,這個站點對應獨立的域名(也可能是ip或埠.具有獨立的程式及資源目錄,可以獨立地對外提供服務供使用者訪問。

這個獨立的站點在配置裡是由一定格式的標籤段標記的,對於Apache軟體來說,一個虛擬主機的標籤段通常被包含在以的此<VirtualHost></VirtualHost>,而Nginx軟體則使用一個server{}標籤來標示一個虛擬主機。一個Web服務裡可以有多個虛擬主機標籤對,即可以同時支援多個虛擬主機站點。

4.3.2 虛擬主機型別

常見的虛擬主機型別有如下幾種

1)基於域名的虛擬主機

所謂基於域名的虛擬主機,意思就是通過不同的域名區分不同的虛擬主機,基於域名的虛擬主機是企業應用最廣的虛擬主機型別,幾乎所有對外提供服務的網站使用的都是基於域名的虛擬主機,例如: www.znix.top。

2)基於埠的虛擬主機 

同理,所謂基於埠的虛擬主機,意思就是通過不同的埠來區分不同的虛擬主機,此類虛擬主機對應的企業應用主要為公司內部網站,例如:一些不希望直接對外提供使用者訪問的網站後臺等,訪問基於埠的虛擬主機,地址裡要帶有埠,例如:http://blog.znix.top:80

    3)基於IP的虛擬主機

 所謂基於IP的虛擬主機,意思是通過不同的IP區分不同的虛擬主機,

4.3.3 Nginx配置虛擬主機的步驟如下(適合各類虛擬主機型別)

1)增加一個完整的server標籤段到結尾處。注意,要放在http的結束大括號前,也就是將server標籤段放入http標籤。

2)更改server_name及對應網頁的root根目錄,如果需要其他引數,可以增加或修改。

3)建立Seever_name域名對應網頁的根目錄,並且建立測試檔案,如果沒有index首頁,訪問會出現403錯誤。

     如果是apache軟體,沒有首頁檔案,預設會把站點目錄下面的資訊顯示出來

     nginx出403錯誤解決方式:http://clsn.blog.51cto.com/2561410/1633952

     autoindex on;#<==當找不到首頁檔案時,會展示目錄結構,這個功能一般不要用除非有需求。

 

    PS:顯示的目錄結構中,有些資訊點選就是下載,有的點選就是顯示,因為副檔名稱不一樣

         根本在於nginx軟體是否能夠進行解析

         nginx是否解析:

         1.htmljpg認識顯示出內容

         2.不認識不解析便直接下載

4)檢査Nginx配置檔案語法,平滑重啟Nginx服務,快速檢査啟動結果。

5)在客戶端對server_name處配置的域名做host解析或DNS配置,並檢査(ping域名看返回的IP是否正確)。

6)在Win32瀏覽器中輸入地址訪問,或者在Linux客戶端做hosts解析,用wget或curl接地址訪問。

7)在服務重啟或關閉之前先進行一次配置檔案檢查 /application/ngnix/sbin/nginx -t

Nginx虛擬主機的官方幫助網址為:http://Nginx.org/en/docs/http/requestj3rocessing.html

4.4 【實踐】虛擬主機配置

4.4.1 基於域名的虛擬主機

修改配置檔案

[[email protected] ~]# cat  /application/nginx/conf/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.nmtui.com;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {
        listen       80;
        server_name  bbs.nmtui.com;
        location / {
            root   html/bbs;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {
        listen       80;
        server_name  blog.nmtui.com;
        location / {
            root   html/blog;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

檢查配置資訊是否正確

[[email protected] conf]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

重啟服務

[[email protected] conf]# /application/nginx/sbin/nginx -s reload

注意:服務沒有啟動的時候不能使用平滑重啟

建立站點目錄

[[email protected] conf]# for name in www blog bbs ;do  mkdir ../html/$name -p ;done

建立主頁檔案

[[email protected] conf]# for name in www blog bbs ;do echo "web01 $name" >../html/$name/index.html  ;done

檢查主頁內容資訊

[[email protected] conf]# for name in www blog bbs ;do  cat ../html/$name/index.html ;done
web01 www
web01 blog
web01 bbs

修改主機hosts檔案

[[email protected] ~]# vim /etc/hosts
172.16.1.8    web01 www.nmtui.com blog.nmtui.com bbs.nmtui.com

測試

[[email protected] ~]# curl  www.nmtui.com
web01 www
[[email protected] ~]# curl  blog.nmtui.com
web01 blog
[[email protected] ~]# curl  bbs.nmtui.com
web01 bbs

4.4.2 基於埠的虛擬主機

修改配置檔案內容

[[email protected] conf]# vim nginx.conf
    server {
        listen       81;
        server_name  bbs.nmtui.com;
        location / {
            root   html/bbs;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
"nginx.conf" 46L, 1098C written  

重啟服務

[[email protected] conf]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful
[[email protected] conf]# /application/nginx/sbin/nginx -s reload

檢查埠資訊

[[email protected] conf]# netstat -lntup |grep ng
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      40110/nginx        
tcp        0      0 0.0.0.0:81                  0.0.0.0:*                   LISTEN      40110/nginx  

測試訪問

[[email protected] ~]# curl  bbs.nmtui.com:81
web01 bbs

4.4.3 基於IP的虛擬主機

注意:  

採用基於IP的虛擬主機,配置檔案修改後要重啟(-s stop)

配置和IP地址配置相關的都要採用(-s stop)重啟,不能夠使用軟重啟的方式

修改配置檔案

[[email protected] 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       10.0.0.8:80;
        server_name  www.nmtui.com;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

檢查配置檔案格式

[[email protected] conf]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

重啟服務,注意使用的是直接重啟的方式 

只要nginx配置檔案中涉及到IP地址的更改只能正真的重啟才生效

[[email protected] conf]# /application/nginx/sbin/nginx -s stop
[[email protected] conf]# /application/nginx/sbin/nginx
[[email protected] conf]# netstat -lntup |grep ng
tcp        0      0 10.0.0.8:80                 0.0.0.0:*                   LISTEN      40592/nginx   

訪問測試

 

4.5 【規範化配置】nginx配置檔案企業規範化

4.5.1 第一個里程碑:  建立虛擬主機配置檔案儲存目錄

[[email protected] conf]# pwd
/application/nginx/conf
[[email protected] conf]# mkdir extra

4.5.2 第二個里程碑: 生產虛擬主機配置檔案

[[email protected] conf]# sed -n '10,21p' nginx.conf > extra/www.conf
[[email protected] conf]# sed -n '22,33p' nginx.conf > extra/bbs.conf
[[email protected] conf]# sed -n '34,45p' nginx.conf > extra/blog.conf

4.5.3 第三個里程碑: 修改nginx配置檔案使之載入識別虛擬主機配置檔案

[[email protected] 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;
    include extra/*;
}

4.5.4 重啟服務

[[email protected] conf]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

4.5.5 檢查監聽埠

[[email protected] conf]# netstat -lntup |grep ng
tcp        0      0 0.0.0.0:80           0.0.0.0:*       LISTEN      40714/nginx       

4.5.6 檢視配置檔案的載入順序

[[email protected] logs]# /application/nginx/sbin/nginx -T

引數說明:

-T   : test configuration, dump it and exit

   測試配置檔案,並且載入一遍,並顯示載入的順序

4.5.7 【優化】調整 inculde的載入順序,指定第一個載入為conf

[[email protected] 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;
    include extra/www.conf;
    include extra/bbs.conf;
    include extra/blog.conf;
}

4.5.8 重啟服務

[[email protected] conf]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful
[[email protected] conf]# /application/nginx/sbin/nginx -s reload

4.5.9 說明;

這樣的配置能夠讓使用者通過IP訪問的時候,訪問到的網站是www的網站。

4.6 別名的配置

在配置檔案中新增別名

[[email protected] conf]# vim extra/www.conf
    server {
        listen       80;
        server_name  www.nmtui.com nmtui.cn;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

重啟服務

[[email protected] conf]# /application/nginx/sbin/nginx -s reload

修改hosts 進行訪問測試

[[email protected] www]# curl  nmtui.cn
web01 www

4.7 status 狀態模組

4.7.1 狀態模組的配置

修改配置檔案,新增三status模組

[[email protected] 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  status.nmtui.com;
          location / {
            stub_status on;
            access_log   off;
          }
        }
    include extra/www.conf;
    include extra/bbs.conf;
    include extra/blog.conf;
}

檢查配置檔案是否正確

[[email protected] conf]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

重啟服務

[[email protected] conf]# /application/nginx/sbin/nginx -s reload

訪問測試 

說明:

 

以上頁面內容資訊主要會被zabbix監控服務調取,形成影象資訊
根據圖形資訊,從而判斷nginx網站服務使用者訪問量情況

 

4.7.2 狀態模組說明

引數

引數說明

Active connections

當前的活動客戶端連線數量

accepts          

接受客戶端連線的總數

handled          

處理的連線總數

requests         

客戶端請求的總數

Reading          

nginx正在讀請求頭的當前連線數。

Writing          

nginx正在將響應寫回客戶端的當前連線數。

Waiting          

當前空閒客戶端連線數等待一個請求。

4.8 nginx的日誌功能

nginx的兩種日誌種類

錯誤日誌:記錄nginx執行錯誤情況資訊

訪問日誌:記錄使用者訪問日誌資訊

官方說明: http://nginx.org/en/docs/ngx_core_module.html#error_log

4.8.1 定義錯誤日誌資訊

系統預設配置

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

配置錯誤日誌,修改主配置檔案

[[email protected] logs]# vim ../conf/nginx.conf
worker_processes  1;
error_log  logs/error.log  error;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
          server{
          listen  80;
          server_name  status.nmtui.com;
          location / {
            stub_status on;
            access_log   off;
          }
        }
    include extra/www.conf;
    include extra/bbs.conf;
    include extra/blog.conf;
}

重啟服務

[[email protected] logs]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful
[[email protected] logs]# /application/nginx/sbin/nginx -s reload

檢視錯誤日誌資訊

[[email protected] logs]# tail  error.log
2017/10/25 11:41:55 [error] 40842#0: *7 open() "/application/nginx-1.10.2/html/www/favicon.ico" failed (2: No such file or directory), client: 10.0.0.1, server: www.nmtui.com, request: "GET /favicon.ico HTTP/1.1", host: "www.nmtui.com", referrer: "http://www.nmtui.com/"

4.8.2 訪問日誌配置

系統預設配置

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';
 
#access_log  logs/access.log  main;

修改訪問日誌配置--修改主配置檔案

[[email protected] www]# cat ../../conf/nginx.conf
worker_processes  1;
error_log  logs/error.log  error;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
 
          server{
          listen  80;
          server_name  status.nmtui.com;
          location / {
            stub_status on;
            access_log   off;
          }
        }
    include extra/www.conf;
    include extra/bbs.conf;
    include extra/blog.conf;
}

修改訪問日誌配置--修改虛擬主機配置檔案

[[email protected] www]# cat /application/nginx/conf/extra/www.conf
    server {
        listen       80;
        server_name  www.nmtui.com nmtui.cn;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
     access_log  logs/access_www.log  main;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

4.8.3 【重要】訪問日誌資訊說明

日誌內容

10.0.0.1 - - [22/Oct/2017:16:04:54 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36" "-"

配置檔案

'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

日誌資訊說明

引數

日誌內容

含義

$remote_addr

10.0.0.1

客戶端ip地址

-

-

 

$remote_user

-

顯示遠端訪問者使用者資訊

[$time_local]

[22/Oct/2017:16:04:54 +0800]

顯示訪問時間

$request

GET / HTTP/1.1"

請求行資訊

$status

304

狀態碼

$body_bytes_sent

0

響應報文主體內容大小

$http_referer

-

 

$http_user_agent

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36

客戶端瀏覽網頁工具資訊

$http_x_forwarded_for

-

反向代理轉發

詳細日誌詳細說明

Nginx日誌變數

說明

$remote_addr

記錄訪問網站的客戶端地址;即源IP地址

$http_x_forwarded_for

當前端有代理伺服器時,設定web節點記錄客戶端地址的配置,此引數生效的

前提是代理伺服器上也進行了相關的x_forwarded_for設定

可以記錄使用者真實的IP地址資訊

$remote_user

遠端客戶端使用者名稱稱

$time_local

記錄訪問時間與時區

$request

使用者的http請求起始行資訊

$status

http狀態碼,記錄請求返回的狀態,例如:200 , 404 , 301等

$body_bytes_sents

伺服器傳送給客戶端的響應body位元組數

$http_referer

記錄此次請求是從哪個連結訪問過來的,可以根據referer進行防盜鏈設定

即表示是哪個網站介紹過來的

$http_user_agent

記錄客戶端訪問資訊,例如:瀏覽器、手機客戶端等

在沒有特殊要求的情況下,採用預設的配置即可,更多可以設定的記錄日誌資訊的變數見:http://nginx.org/en/docs/http/ngx_httpJog_module.html1

4.8.4 日誌的切割

切割日誌方式

01:利用指令碼實現日誌切割

簡單指令碼

[[email protected] logs]# cat /server/scripts/log_cut.sh
#!/bin/bash
 
mv /application/nginx/logs/access_www.log  /application/nginx/logs/access_www_`date +%F`.log
/application/nginx/sbin/nginx -s reload

包含判斷的指令碼

[[email protected] logs]# cat /server/script/cut_nginx_log.sh
# ! /bin/sh
Dateformat='date +%Y%m%d'
Basedir= "/application/nginx"
Nginxlogdir="$Basedir/logs"
Logname="access_www"
[-d $Nginxlogdir ] && cd $Nginxlogdir || exit 1
[-f ${Logname}.log ] || exit 1
/bin/mv ${Logname}.log ${Dateformat}_${Logname}.log
$Basedir/sbin/nginx -s reload

02.利用系統自帶切割軟體進行切割

cat /etc/logrotate.conf

4.9 企業需求解決(location應用)

   1、搭建好一臺nginx的web伺服器,配置好內網網絡卡地址與外網網絡卡地址

   2、web伺服器的網站域名為www.nmtui.com 站點目錄為 html/www

   3、要求內網可以訪問 www.nmtui.com/AV 資源

   4、要求外網不可以訪問 www.nmtui.com/AV 資源

4.9.1 需求處理 --location的應用

1、定位需要控制的資源

     location == if

修改配置檔案

[[email protected] extra]# cat www.conf
    server {
        listen       80;
        server_name  www.nmtui.com;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
        location /AV  {
            root  html/www;
            index index.html index.htm;
            allow 172.16.1.0/24;
            deny  all;
        }
    }

4.9.2 location 語法

location 指令的作用是根據使用者請求的URI來執行不同的應用。

locationn使用的語法為

location [=|~|~*|^~] uri {
  ....
}

location 語法說明表

location

相關推薦

nginx服務企業級應用

1.1 常用來提供靜態服務的軟體   Apache :這是中小型Web服務的主流,Web伺服器中的老大哥,   Nginx :大型網站Web服務的主流,曾經Web伺服器中的初生牛犢,現已長大。   Nginx 的分支&nbs

Nginx服務企業應用

out c-c 維護成本 系統環境 inux mongo 長大 標識 error 1.1 常用來提供靜態服務的軟件 Apache :這是中小型Web服務的主流,Web服務器中的老大哥, Nginx :大型網站Web服務的主流,曾經Web服務器中的初生牛犢,現已長

Nginx服務學習(11)-應用場景

code vpd ces oca eve 壓縮 pro off 傳輸 Nginx服務 Nginx靜態資源web服務 Nginx代理服務 Nginx負載均衡調度 Nginx緩存 CDN分發網絡 模塊配置 Syntax:sendfile on | off; ##文件

L09-10老男孩Linux運維實戰培訓-Nginx服務生產實戰應用指南05(架構解決方案)

環境 是否 gin 使用 pac 開啟 con apach 文件 nginx的多實例設置首先說一下nginx後面加的參數的說明 -s 後面加reload 就是重新加載的意思和apache的graceful同樣的效果 -v 小寫的v顯示版本號後退出 -V大寫的V顯示ngin

企業級應用服務動靜分離

負載均衡 動靜分離 linux 此處只貼出實現代碼 背景:通過Nginx實現7層動靜分離,即通過Nginx反向代理配置規則實現讓動態資源和靜態資源及其他業務分別由不同的服務器解析。 測試機器準備工作7層動靜分離案例負載均衡lb01 [root@lb01 ~]# cat /application

開源方案搭建可離線的精美矢量切片地圖服務-7.Arcgis Pro企業級應用

地圖渲染 www. map 軟件下載 新版本 AR 要點 導入 rod 1.前言 上篇講.pbf字體庫的時候說到我們使用的字體通過Arcgis Pro 生成,Arcgis Pro樣式基於Mapbox做的矢量切片地圖渲染。這篇主要講一下Arcgis Pro矢量切

打造一個企業級應用的微服務開發框架(上)---從服務註冊中心到服務管理中心

【摘要】近年來越來越多的企業開始實踐微服務,本文分為上下兩篇介紹微服務框架ServiceComb如何幫助企業應用進行微服務化,實現快速交付,並可靠地執行在雲端。上篇介紹ServiceComb的服務管理中心設計。近年來越來越多的企業開始實踐微服務,而微服務在企業應用落地的過程,面臨著微服務開發框架的選型,無論是

【Spark深入學習 -12】Spark程序設計與企業級應用案例02

提升 算子 lin count() roi println groupby 工作問題 衍生 ----本節內容------- 1.遺留問題答疑 1.1 典型問題解答 1.2 知識點回顧 2.Spark編程基礎 2.1 Spark開發四部曲 2.2 RDD典型實例

【Linux】nginx服務配置

網站目錄 write timeout per dex 修改 header www val 一. 部署LNMP環境 準備工作 Linux系統準備 設置IP 關閉防火墻

【CNMP系列】CentOS7.0下安裝Nginx服務

系統資源 for proxy input strong network emc -c .com 話步前言,CNMP之路,系統起步:http://www.cnblogs.com/riverdubu/p/6425028.html 這回我來講解下CentOS7.0下如何安裝和配置

Samba服務Nginx服務

logs 如果 star smb tro 解析 glibc edt devel Samba服務: 1 準備環境 =====>part1: iptables -F 清楚防火墻配置 #systemctl disable firewalld #開機默認關閉 #syst

Day 10 (06/01) nginx服務 ndf服務 計劃任務crond服務

意思 不知道 proc 重啟 訪問權限 計時 /dev/ nginx pid nginx服務 源碼安裝: yum install gcc-* glibc-* openssl openssl-devel pcre pcre-devel zlib zlib-devel -yl

Samba、nginx服務

server lin col 匹配 調用 內容 服務啟動 安裝 nbsp 一、nginx服務 二進制安裝nginx包: 源代碼安裝: 服務啟動: 啟動腳本所在目錄、以路徑內的配置信息啟動服務: 查看nginx監聽端口是否開啟: 二、nginx反向代

Linux基礎系列:常用命令(5)_nfs服務nginx服務

ash .com access emctl 磁盤 keepalive roo inux iptable 介紹:   NFS 是Network File System的縮寫,即網絡文件系統。一種使用於分散式文件系統的協定,由Sun公司開發,於1984年向外公布。功能是通過

Nginx 服務器 之Nginx與tomcat實現負載均衡

nobody 服務器 listen server events 本文講解我們如何使用Nginx做反向帶服務器,實現nginx與tomcat服務器集群做負載均衡。一、nginx與tomcat實現負載均衡1、在/usr/local/ngnix/conf 創建文件 nginx-tomcat.

Nginx服務器之 Nginx的基本配置

connect cast body netmask gin 主機ip ash 操作 日誌輸出 本文使用 Linux centos系統 一、Nginx虛擬主機的配置 虛擬主機:通常情況下,為了使每個服務器可以供更多用戶使用,可以將一個服務器分為很多虛擬的子服務器,每個子服務器

Nginx服務器之基礎學習

下載到本地 ces image nginx安裝 work 網絡數 設備 老版本 win 一、Nginx介紹 nginx:Nginx是一種軟件服務器(輕量級),故它最主要的功能就是可以與服務器硬件結合,我們的應用程序可以放在nginx服務器上進行發布,已達到讓網民瀏覽的效

SequoiaDB x Spark 新主流架構引領企業級應用

解決 構圖 負載 san ans har 最全 進行 inner 6月,匯集當今大數據界精英的Spark Summit 2017盛大召開,Spark作為當今最炙手可熱的大數據技術框架,向全世界展示了最新的技術成果、生態體系及未來發展規劃。 巨杉

.NET企業級應用WebService上傳下載文件

directory 寫入文件 index ret eno viewbag dex tdi 添加 在建立好一個WebService後會有一個自帶的 [WebMethod]//在待會寫的所有方法中都要寫這個,便於調試 public string HelloW

Linux中nginx服務器啟動腳本

nginx啟動腳本 linux shell腳本 Linux中nginx服務器啟動腳本,將此腳本放入/etc/init.d/目錄下,進行啟動和關閉,並用chkconfig命令將nginx加入到chkconfig管理中,設置開機自啟動。 詳細腳本如下:#!/bin/bash #aut