1. 程式人生 > >Nginx的繼續深入(日誌輪詢切割,重寫,負載均衡等)

Nginx的繼續深入(日誌輪詢切割,重寫,負載均衡等)

Nginx的訪問日誌輪詢切割

通常什麼情況Nginx會把所有的訪問日誌生成到一個制定的訪問日誌檔案access.log裡面,但時間一長,日誌個頭很大不利於日誌的分析和處理。

有必要對Nginx日誌進行按天或按小時進行切割,分成不同的檔案儲存。

[[email protected] logs]#cat /server/script/cut_nginx_log.sh
#!/bin/sh
Dataformat = `date +%Y%m%d`
Basedir = "/usr/local/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

注意:指令碼實現切割Nginx日誌的思想為講正在寫入的Nginx日誌改名為(20161111_access_www.log),然後平滑重啟生成新的nginx日誌(access_www.log)

通過定時任務實現每天的00點整定時執行/server/script/cut_nginx_log.sh

00 00 * * * /bin/sh /server/script/cut_nginx_log.sh >/dev/null 2>&1

Nginx 的location語法

location的使用基本語法:

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

location   指令
[
=|~|~*|@] 匹配標識 uri 匹配的網站網址 {。。。。} 匹配URI後要執行的配置段

~ 區分大小寫(大小寫敏感)

 ~* 不區分大小寫匹配

 !取反

 ^~ 的作用是用來進行常規的字串匹配檢查之後不做正則表示式的檢查

匹配例項

location = / {
    [ configuration A]
}
location / {
    [ configuration B]
}
location /documents/ {
    [ configuration C]
}
location ^~ /images/ {
    [ configuration D]
}
location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E]
}

使用者請求的URL

http://www.abc.com/    匹配A    /
http://www.abc.com/    匹配B    /index.html
http://www.abc.com/documents/document.html    匹配C    /documents/document.html
http://www.abc.com/images/1.gif    匹配D    /images/1.gif
http://www.abc.com/documents/1.gif    匹配E  /documents/1.gif

Nginxd rewrite

\  進行轉義
^ 匹配輸入字串的起始位置
$ 匹配輸入字串的結束位置
* 匹配0次或多次
+ 匹配1次到多次
? 匹配0次到1次
.   匹配除\n以外的任意字元
(pattern) 匹配括號內的字元

rewrite 指令最後一項引數flag標記說明

last  本條規則匹配完成後,繼續向下匹配新的location URI規則
break  本條規則匹配完成即終止,不在匹配後面的任何規則
redirect 返回302 臨時重定向, 瀏覽器位址列會顯示跳轉後的URI地址
permanent 返回301 永久重定向, 瀏覽器位址列會顯示跳轉後的URI地址

例項:

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

Nginx負載均衡

負載均衡模組的元件

ngx_http_proxy_module  proxy代理模組
ngx_http_upstream_module  負載均衡模組
upstream www_server_pools {   #upstream 關鍵字 www_server_pools 叢集組的名字,可以自己起名字
  server 10.1.1.1:80 weight=5; #server關鍵字 ip/域名:埠, 預設80 weight權重
  server 10.1.1.1:80 weight=5;    #如果用域名解析,需要在hosts裡面有域名解析;或者內網有DNS
  server www.abc.com:80 weight=5 backup;
  server unix:/temp/backend3; #指定socket檔案/可以不寫
}

通過proxy_pass 功能把使用者的請求交由上面反向代理upstream定義的tornadoes伺服器池處理

 

weight = 1 代表伺服器權重,預設值是1, 權重數字表示接受的請求比例越大;

max_fails = 1 nginx嘗試連線主機失敗的次數,這個值是配合proxy_next_upstream、fastcgi_next_upstram 和 memcached_mext_upstream三個引數來使用的。

backup  熱備配置(RS節點的高可用),噹噹前啟用的RS都失敗後會自動啟動熱備RS。這標誌這個伺服器作為備份伺服器,如果主宕機,就會向他轉發請求。注意:

當負載排程演算法為ip_hash時,後端伺服器不能是weight和backup

fail_timeout = 10s  在max_fails定義失敗次數後,距離下次檢查的間隔時間,預設是10s;如果是5,就檢測5次,如果5次都是502,那麼就等待10s在去檢查

down  標誌這伺服器永遠不可用,這個引數可以配合ip_hash使用

upstream 模組排程演算法

1.rr輪詢(預設排程演算法,靜態排程演算法)
相當於lvs的rr演算法,如果後端節點伺服器宕機(預設檢測80),自動會從節點地址池剔除
2.wrr(權重輪詢,靜態排程演算法)


例子:
upstream pools{
  server 192.168.1.1 weight=1;
  server 192.168.1.2 weight=2;
}
3.ip_hash(靜態排程演算法)
每個請求按客戶端的IP的hash進行分配;缺點可能道士分配不均無法保證1:1的負載均衡。比如客戶端的nat上網方式

例子:
upstream pools{
ip_hash;
server backend1.example.com;   #可以用ip
server backend2.example.com down;

}
注意:ip_hash時,不能有weight和backup
4.fair(動態排程演算法)

此演算法會根據後端節點伺服器的響應時間來分配請求,響應時間短的優先分配
nginx 本身不支援fair排程演算法,需要下載nginx的相關模組upstram_fair

例子:
upstream pool{
server 192.168.1.1;

server 192.168.1.2;
fair;
}
5.least_conn
此演算法會根據後端節點的連線數來決定分配情況,那個機器連線數少就分發。
6.url_hash演算法
和ip_hash 類似,這個是根據訪問 URL的hash分配的。同樣也不能寫入weight等
必須安裝nginx的哈市模組軟體包
例子:
upstream pools{
server queid1:1233;
server squid2:1233;
hash $request_uri;
hash_method crc32;
}
7.一致性hash演算法

Nginx反向代理

 http_proxy_module 模組

此模組可以將請求轉發到另一臺伺服器,在實際的反向代理工作中,或通過location功能指定URL,然後在接受到的符合匹配的URI的請求通過proxy_pass 拋給定義好的upstream節點池

案例:

1.將匹配URI為name的請求拋給http://127.0.0.1/remote/

location /name/ {
proxy_pass http://127.0.0.1/remote/;
}

2.將匹配URI為name的請求應用指定的rewrite規則,然後拋給http://127.0.0.0.1.

location /name/ {
  rewrite /name/([^/]+) /users?name=$1 break;
  proxy_pass http://127.0.0.1;
}

 

相關推薦

Nginx繼續深入日誌切割重寫負載均衡

Nginx的訪問日誌輪詢切割 通常什麼情況Nginx會把所有的訪問日誌生成到一個制定的訪問日誌檔案access.log裡面,但時間一長,日誌個頭很大不利於日誌的分析和處理。 有必要對Nginx日誌進行按天或按小時進行切割,分成不同的檔案儲存。 [[email protected] logs

【轉】淺談一個網頁打開的全過程涉及DNS、CDN、Nginx負載均衡

位置 filters 產生 多種方法 tps windows cnblogs 這就是 廣東 1、概要   從用戶在瀏覽器輸入域名開始,到web頁面加載完畢,這是一個說復雜不復雜,說簡單不簡單的過程,下文暫且把這個過程稱作網頁加載過程。下面我將依靠自己的經驗,總結一下整個過程

淺談一個網頁開啟的全過程涉及DNS、CDN、Nginx負載均衡

1、概要   從使用者在瀏覽器輸入域名開始,到web頁面載入完畢,這是一個說複雜不復雜,說簡單不簡單的過程,下文暫且把這個過程稱作網頁載入過程。下面我將依靠自己的經驗,總結一下整個過程。如有錯漏,歡迎指正。   閱讀本文需要讀者已有一定的計算機知識,瞭解TCP、DNS等。 2、分析   眾所周知,開啟

SpringCloudRibbon負載均衡《2》核心元件IRule及自定義Ribbon負載均衡策略

1、Ribbon核心元件IRule 1.1、解析IRule自帶的7種演算法 IRule:根據特定演算法從服務列表中選取一個要訪問的服務。 IRule實現類如下: RandomRule:隨機,使用Random物件從服務列表中隨機選擇一個服務 RoundRobinR

nginx變量日誌

pan doc microsoft ont ram png blog 分享 alt nginx變量(日誌) HTTP請求變量 - arg_PARAMETER、http_HEADER、sent_http_HEADER 它是指http請求中的變量,舉例: 修改/etc/ng

Apache日誌配置詳解

Apache日誌輪詢介紹 Apache日誌輪詢配置 Apache虛擬主機日誌輪詢 Apache日誌輪詢配置詳解1、apache日誌輪詢作用隨著服務器的不斷運行,日誌文件會越來越大,如果不小心把日誌文件放到了/var之類位置,日誌文件可能寫滿分區,從而導致服務器被迫停止運行。這種事情確實曾經發生過。

Linux 下 logrotate 日誌操作梳理

對於 Linux 系統安全來說,日誌檔案是極其重要的工具。不知為何,我發現很多運維同學的伺服器上都執行著一些諸如每天切分 Nginx日誌之類的 CRON 指令碼,大家似乎遺忘了 Logrotate,爭相發明自己的輪子,這真是讓人沮喪啊!就好比明明身邊躺著現成的性感美

使用logrotate配置日誌

logrotate配置 在/etc/logrotate.d/目錄下建立一個配置檔案例如nginx,檔案內容如下: nginx 示例如下: /usr/local/nginx/logs/*.log {        &

詳解JavaScript的執行機制:Event Loop事件機制

前言 有人稱Event Loop為事件迴圈機制,而我更願意將其解釋為事件輪詢機制,在之後的內容中你會感受到這一點的區別在哪裡。說是事件輪詢機制,我們也可以說是任務輪詢機制,因為英文是Event Loop,所以我們在此文中將其翻譯為事件輪詢。 閱讀本文之前,首先對JavaScrip

mysql與mariaDB涉及到的檔案日誌檔案、程序檔案、套接字檔案

文章目錄 1、引數配置檔案 2、日誌檔案 2.1 錯誤日誌 2.2 慢查詢日誌 2.3 查詢日誌 2.4 二進位制日誌 3、套接字檔案 4、p

11.17 域名解析DNS---------快取記憶體DNS權威DNS的正反向解析:域名轉換,郵箱解析內部解析和外部解析

1.概念的介紹 1)DNS DNS(Domain Name System,域名系統),全球資訊網上作為域名和IP地址相互對映的一個分散式資料庫,能夠使使用者更方便的訪問網際網路,而不用去記住能夠被機器直接讀取的IP數串。 2)快取記憶體DNS服務 快取記憶體DNS服務的作用:正常上網

windows下啟動nginx閃退---Windows平臺下80埠被System佔用解決辦法

前言: 在專案中用到nginx,啟動時閃退,檢視錯誤日誌,給出的錯誤如下: nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access  a socket in a way forb

一篇文章讀懂Nginx正向代理、反向代理、負載均衡原理

Nginx配置詳解 nginx概述 nginx是一款自由的、開源的、高效能的HTTP伺服器和反向代理伺服器;同時也是一個IMAP、POP3、SMTP代理伺服器;nginx可以作為一個HTTP伺服器進行網站的釋出處理,另外nginx可以作為反向代理進行負載均衡的實

accept()函式用來告訴Qt事件處理函式“接收”了這個事件不要再傳遞;ignore()函式則告訴Qt事件處理函式“忽略”了這個事件需要繼續傳遞看一下QWidget::mousePressEvent的實現最為典型。如果希望忽略事件只要呼叫父類的響應函式即可

QEvent的accept()和ignore()一般不會用到,因為不如直接呼叫QWidget類的事件處理函式直接,而且作用是一樣的,見下面的例子。 推薦直接呼叫QWidget的事件處理函式。而不是呼叫accept()和ignore()。   只有一種情況下,必須使用呼叫accept()和ign

Nginx詳解正向代理、反向代理、負載均衡原理

http { ## # 基礎配置 ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # serv

DNS服務子域委派授權解析負載均衡功能原理解析實驗歡迎各位朋友蒞臨指教、討論

子域委派授權負載均衡一、DNS服務器簡易架構圖二、實驗操作步驟~~~~~~~~~~~~~~~~1、設置客戶端域名解析,使之指向緩存服務器~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[root@DNS131 ~]# cat /etc/resolv.conf ; generated

案例二構建雙主高可用HAProxy負載均衡系統

fresh htm nec ont unix outer index ces title 在案例一介紹HAProxy高可用負載均衡集群架構中,雖然通過Keepalived實現了HAProxy的高可用,但是嚴重浪費了服務器資源,因為在一主一備的Keepalived環境中,

微信控制家庭智慧小管家機器人技術解析附語音聊天、人臉檢測、自主巡航

微信控制家庭智慧小管家機器人技術解析(附語音聊天、人臉檢測、自主巡航等) 今天分享微信控制家庭智慧小管家機器人(附語音聊天、人臉檢測、自主巡航等)的資料,內容比較多,這邊文章不夠放,更詳細資料到闖客網技術論壇下載,或加群獲取:81328832 下載地址:https://bbs.usoftchina.com

純CSS製作各種各樣的網頁圖示三角形、暫停按鈕、下載箭頭、加號

三角形 ? 1 2 3 4 5 6 7 8 9 10 11 <div class="box"></div> <style> .box{       &

基於Taro + Dva構建的適配不同端微信小程式、H5、React-Native 的時裝衣櫥

前言 Taro 是一套遵循 React 語法規範的 多端開發 解決方案。現如今市面上端的形態多種多樣,Web、React-Native、微信小程式等各種端大行其道,當業務要求同時在不同的端都要求有所表現的時候,針對不同的端去編寫多套程式碼的成本顯然非常高,這時候只編寫一套程式碼就能夠適配到多端的能力就顯得極