nginx生產環境經常使用功能include 、虛擬主機別名、rewrite、nginx status詳細解析

一.配置文件優化之include參數html

若是咱們用nginx搭建虛擬主機,虛擬主機太多,咱們不能把全部配置放置在nginx.conf中吧?那樣這個配置文件就太大了,看起來很亂,全部這時就產生了
linux

include參數:nginx

你們若是瞭解apache軟件,就會知道apache主配置包含虛擬主機子文件的方法,其實nginx也借鑑了apache的這種包含方法web

nginx的主配置文件爲nginx.conf,主配置文件所包含的全部虛擬主機的子配置文件會統一放入extra(這個名字隨便起的)目錄中,虛擬主機的配置文件會按照網站的域名或者功能取名,例如www.conf bbs.conf  blog.conf 等正則表達式

固然若是虛擬主機的數量不是不少,也能夠把多個虛擬主機配置成一個文件,僅僅和nginx的主配置文件nginx.conf分開便可apache


include實戰例子:
瀏覽器

修改nginx目錄格式以下:app

worker_processes  1;負載均衡

events {curl

    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;

}

或者上面三句話用一句話代替: include extra/*.conf;

這樣nginx的主配置文件就清爽好多了 

在conf下先把extra目錄建出來

mkdir -p /app/zpy/nginx/conf/extra


編輯www.conf 

      server {

        listen       80;

        server_name  www.vipdailiang.com;

        location / {

            root   html/www;

            index  www.html;

        }

    }



編輯bbs.conf 

      server {

        listen       80;

        server_name  bbs.vipdailiang.com;

        location / {

            root   html/bbs;

            index  bbs.html;

        }

    }

blog.conf 原理同上


 

[html]# echo "bbs.vipdailiang.com" > bbs/bbs.html 

[html]# echo "www.vipdailiang.com" > www/www.html 

[html]# echo "blog.vipdailiang.com" > blog/blog.html 


nginx配置文件檢查及從新加載

/app/zpy/nginx/sbin/nginx -t

/app/zpy/nginx/sbin/nginx -s reload

最後驗證:

[root@elkzabbix01 conf]#curl bbs.vipdailiang.com

bbs.vipdailiang.com

[root@elkzabbix01 conf]# curl blog.vipdailiang.com

blog.vipdailiang.com

[root@elkzabbix01 conf]# curl www.vipdailiang.com

www.vipdailiang.com



二.nginx虛擬主機別名和rewrite重寫搞定跳轉需求

以前有一個印象很深的需求,領導要求在瀏覽器輸入zipeiyi.com可以自動跳轉到www.zipeiyi.com ,想了好久,開始無從下手,後來是用硬件負載均衡搞定的,其實nginx有兩種方式能夠搞定

1.虛擬主機別名配置很輕鬆的就能實現,下面咱們來看一下整個配置過程 

所謂虛擬主機別名就是爲 虛擬主機設置除了主域名之外的一個或者多個域名

1)修改配置文件以下項:

     server {

        listen       80;

        server_name  www.vipdailiang.com vipdailiang.com;

        location / {

            root   html/www;

            index  www.html;

        }

    }


2)而後本地測試環境仍是須要添加域名解析的

linux在/etc/hosts 裏添加

10.0.70.3 vipdailiang.com www.vipdailiang.com


3)最後進行測試 

curl www.vipdailiang.com 看看返回結果 和 curl vipdailiang.com 返回結果是否同樣 


[root@elkzabbix01 extra]# curl www.vipdailiang.com 

www.vipdailiang.com

[root@elkzabbix01 extra]# curl vipdailiang.com 

www.vipdailiang.com

結果是同樣同樣的


2.rewrite重寫功能 

什麼是rewrite重寫功能 

和apache等web服務軟件同樣,nginx的rewrite功能主要是實現URL地址重寫

nginx的rewrite功能須要PCRE軟件支持,即經過perl的正則表達式進行匹配,因此咱們開始編譯安裝nginx以前,都須要安裝PCRE軟件


rewrite的語法:

rewrite regex replacement [flag];

rewrite是實現URL重寫的關鍵指令,根據regex(正則表達式)部門的內容,重定義到replacement部分,結尾是flag標記,下面是一個簡單的URL rewrite跳轉的例子



     server {

        listen       80;

        server_name   vipdailiang.com;

        rewrite ^/(.*) http://www.vipdailiang.com/$1 permanent;


    }


     server {

        listen       80;

        server_name  www.vipdailiang.com ;

        location / {

            root   html/www;

            index  www.html;

        }

    }

        

rewrite爲固定關鍵字,表示開啓了rewrite規則 

regex(perl語言的正則表達式) ^/(.*) 表明匹配全部

$1 是取前面正則表達式的內容 

結尾是permanent ,是永久301重定向的標記


效果就是你在瀏覽器輸入 vipdailiang.com 瀏覽器會自動跳轉到www.vipdailiang.com


rewrite功能在企業內用的很是普遍例如:

  1. 例子中所說的狀況

  2. 網站更換新域名後,讓舊域名的訪問跳轉到新域名上,例如讓 京東的360buy換成jd.com





三.nginx status模塊介紹

nginx軟件的功能模塊中有一個 ngx_http_sub_status_module模塊,這個模塊的主要功能是記錄nginx的基本訪問信息,讓使用者瞭解nginx的工做狀態,例如鏈接數等信息。因此在編譯nginx的時候須要增長這個模塊

可經過以下方式檢查編譯nginx的時候是否設定了上述模塊:


[root@elkzabbix01 /]# /app/zpy/nginx/sbin/nginx -V

nginx version: nginx/1.8.1

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

configure arguments: --user=zpy --group=zpy --prefix=/app/zpy/nginx-1.8.1/ --with-http_stub_status_module --with-http_ssl_module




1.建立status.conf文件

[root@elkzabbix01 extra]# cat >>/app/zpy/nginx/conf/extra/status.conf<<EOF


##status

server{

        listen 80;

        server_name status.vipdailiang.com ;

        location / {

        stub_status on ;

        access_log off ;

  }

        }

EOF


2.確保主配置文件裏nginx.conf裏面可以訪問到status.conf

include extra/*.conf;



4.添加解析

在/etc/hosts(linux) 添加 10.0.70.3  status.vipdailiang.com

在C:\Windows\System32\drivers\etc\hosts 添加 10.0.70.3  status.vipdailiang.com


5.檢查配置和從新加載配置文件

../sbin/nginx -t

../sbin/nginx -s reload 

最後在瀏覽器輸入:

wKioL1eHgmjxKEFvAABi8980fWE568.png-wh_50

解釋下這段話的意思:

server 表示: 表示nginx啓動到如今一共處理了83個鏈接

accept 表示: 表示 nginx一共創建了 83次握手

請求丟失是 = 握手 -鏈接 =83(第二個)-83 =0 ,就是沒有丟失的請求


handled request表示: 一共處理了105次請求

writing爲nginx 返回給客戶端的header信息數

reading爲nginx 讀取到客戶端的header數

waiting爲 nginx已經處理完正在等候下一次請求指令的駐留鏈接。

在開啓keep-alive狀況下,這個值等於active-(reading+writing)


下一篇請看: nginx錯誤日誌、nginx訪問日誌、nginx訪問日誌的輪詢切割

相關文章
相關標籤/搜索