Nginx常用功能配置及優化
----------------------------------------------------------------------------------------
規範優化Nginx配置文件:
----------------------------------------------------------------------------------------
Nginx的主配置文件為nginx.conf,主配置文件包含所有虛擬主機的子配置文件同一放到extra目錄中。
虛擬主機的配置文件按照網站的域名或功能取名。
使用include包含到Nginx主配置文件。
優化後示例:
mkdir /application/nginx/extra #創建虛擬主機配置文件目錄
vim /application/nginx/conf/nginx.conf #Nginx主配置文件
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/pan.conf; #包含虛擬主機配置文件
}
vim /application/nginx/extra/www.conf #虛擬主機配置文件
server {
listen 192.168.30.3;
server_name www.smartbro.com;
location / {
root html/www;
index index.html index.htm;
}
}
vim /application/nginx/extra/bbs.conf #虛擬主機配置文件
server {
listen 192.168.20.3;
server_name bbs.smartbro.com;
location / {
root html/bbs;
index index.html index.htm;
}
}
vim /application/nginx/extra/pan.conf #虛擬主機配置文件
server {
listen 192.168.10.3;
server_name pan.smartbro.com;
location / {
root html/pan;
index index.html index.htm;
}
}
/application/nginx/sbin/nginx -t #檢查配置文件
nginx: the configuration file /application/nginx-1.13.4//conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.13.4//conf/nginx.conf test is successful
/application/nginx/sbin/nginx -s reload #平滑重啟Nginx
----------------------------------------------------------------------------------------
Nginx虛擬主機配置文件:
----------------------------------------------------------------------------------------
所謂虛擬主機別名,就是為虛擬主機設置除了主域名以外的一個或多個域名名字,這樣就能實現用戶訪問的多個域名對應同一個主機。
vim /application/nginx/extra/www.conf
server {
listen 192.168.30.3;
server_name www.smartbro.com smart.com; #設置別名
location / {
root html/www;
index index.html index.htm;
}
}
----------------------------------------------------------------------------------------
Nginx狀態信息功能實戰:
----------------------------------------------------------------------------------------
Nginx 軟件的功能模塊有一個ngx_http_stub_status_module模塊,這個模塊的主要功能就是記錄Nginx的基本訪問狀態信息的。
要是用該模塊的功能必須編譯安裝增加http_stub_status_module模塊。
/application/nginx/sbin/nginx -V #查看編譯安裝的參數
nginx version: nginx/1.13.4
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/application/nginx-1.13.4/ --with-http_stub_status_module --with-http_ssl_module
配置Nginx status:
(1)生成狀態配置,並增加狀態配置參數:
vim /application/nginx/extra/status.conf #創建新的配置文件
server {
listen 192.168.10.3:8088;
server_name status.smartbro.com;
location / {
stub_status on; #打開狀態開關
access_log off;
}
}
vim /application/nginx/conf/nginx.conf #修改Nginx主配置文件
include ../extra/status.conf; #將狀態配置文件包含
/application/nginx/sbin/nginx -t #檢查配置文件
nginx: the configuration file /application/nginx-1.13.4//conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.13.4//conf/nginx.conf test is successful
/application/nginx/sbin/nginx #啟動Nginx
curl http://192.168.10.3:8088 #測試服務
Active connections: 1 #表示Nginx正處理的活動連接數
server accepts handled requests #表示到現在總共創建的握手次數
2 2 2
Reading: 0 Writing: 1 Waiting: 0
#Reading是Nginx讀取客戶端的Header信息次數
#Writing是Nginx返回給客戶端的Header信息次數
#Waiting是Nginx已經處理完正在等候下一次請求指令的駐留連接
#在開啟Keepalived的情況下,Waiting的值等於active - (reading - writing)
----------------------------------------------------------------------------------------
Nginx錯誤日誌:
----------------------------------------------------------------------------------------
屬於核心模塊(ngx_core_module)的參數,參數名是error_log,可以放到Main區塊的全局配置,也可以放到不同的虛擬主機中。
語法格式:
error_log file level;
關鍵字 日誌文件 等級
日誌級別常見有:debug info notice warn error crit alert emerg
生產場景一般是:warn error crit
使用debug或info時會帶來巨大的磁盤I/O消耗
error_log的默認配置是:
error_log logs/error.log error;
可以放置的標簽段:
main http server location
配置Nginx錯誤日誌:
vim /application/nginx/conf/nginx.conf
error_log logs/error.log error;
/application/nginx/sbin/nginx -t #檢查配置文件語法
nginx: the configuration file /application/nginx-1.13.4//conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.13.4//conf/nginx.conf test is successful
/application/nginx/sbin/nginx -s reload #平滑重啟Nginx
----------------------------------------------------------------------------------------
Nginx訪問日誌:
----------------------------------------------------------------------------------------
功能由ngx_http_log_module模塊負責。
log_format:用來定義記錄日誌的格式
access_log:用來指定日誌文件的路徑和使用日誌格式記錄文件
默認的格式:
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for"‘;
訪問日誌配置說明:
(1)日誌格式的定義說明
log_format是關鍵字
main用來指定日誌格式的標簽
Nginx日誌文件的變量說明:
+------------------------------------------------------------------------------------------------------+
|$remote_addr |記錄訪問網站的客戶端地址 |
+------------------------------------------------------------------------------------------------------+
|$http_x_forwarded_for|當前端有代理服務器的時候,設置Web節點記錄客戶端得我配置,此參數生 |
| |效的前提是代理服務器上也進行相關的x_forwarded_for設置 |
+------------------------------------------------------------------------------------------------------+
|$remote_user |遠程客戶端用戶名稱 |
+------------------------------------------------------------------------------------------------------+
|$request |用戶的HTTP請求起始行信息 |
+------------------------------------------------------------------------------------------------------+
|$status |HTTP狀態碼,記錄請求返回的狀態 |
+------------------------------------------------------------------------------------------------------+
|$body_bytes_sent |服務器發送給客戶端的響應body字節數 |
+------------------------------------------------------------------------------------------------------+
|$http_referer |記錄此次請求是從哪個鏈接訪問過來的,可以根據referer進行防盜鏈設置 |
+------------------------------------------------------------------------------------------------------+
|$http_user_agent |記錄客戶端訪問信息 |
+------------------------------------------------------------------------------------------------------+
在沒有特殊情況的前提下,采用默認配置即可。
記錄日誌的access_log參數說明:
access_log path [format [buffer=size] [flush=time] [if=condition]];
access_log path format gzip=[level] [buffer=size] [flush=time] [if=condition];
access_log syslog:server=address [,parameter=value] [format [if=condition]];
buffer=size是存放訪問日誌的緩沖區大小
flush=time是講緩沖區的日誌刷新到磁盤的時間
gzip[=level]是壓縮級別
[if=condition]表示其他條件
一般情況下,這些參數都無需配置,極端優化時才會考慮這些參數。
默認配置:
access_log logs/access.log combined;
放置位置:
http server location if in location limit_eccept
訪問日誌配置實戰:
vim /application/nginx/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;
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘ #使用默認的配置
‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for"‘;
keepalive_timeout 65;
include ../extra/www.conf;
include ../extra/bbs.conf;
include ../extra/pan.conf;
include ../extra/status.conf;
}
vim /application/nginx/extra/www.conf #修改各個虛擬主機的配置文件
server {
listen 192.168.30.3;
server_name www.smartbro.com smart.com;
location / {
root html/www;
index index.html index.htm;
}
access_log logs/access_www.log main; #開啟日誌,默認使用combined格式距離日誌
}
vim /application/nginx/extra/pan.conf #修改各個虛擬主機的配置文件
server {
listen 192.168.10.3;
server_name pan.smartbro.com;
location / {
root html/pan;
index index.html index.htm;
}
access_log logs/access_pan.log main; #開啟日誌,默認使用combined格式距離日誌
}
vim /application/nginx/extra/bbs.conf #修改各個虛擬主機的配置文件
server {
listen 192.168.20.3;
server_name bbs.smartbro.com;
location / {
root html/bbs;
index index.html index.htm;
}
access_log logs/access_bbs.log main; #開啟日誌,默認使用combined格式距離日誌
}
/application/nginx/sbin/nginx -t #檢查配置文件語法
nginx: the configuration file /application/nginx-1.13.4//conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.13.4//conf/nginx.conf test is successful
/application/nginx/sbin/nginx -s reload #平滑重啟Nginx
使用谷歌瀏覽器訪問,出現日誌:
192.168.10.1 - - [10/Aug/2017:23:38:48 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3159.5 Safari/537.36" "-"
可以在記錄日誌參數中加入buffer和flush選項,這樣可以在高並發場景下提升網站訪問性能。
----------------------------------------------------------------------------------------
Nginx訪問日誌輪詢切割:
----------------------------------------------------------------------------------------
默認情況Nginx會把所有的日誌生成到一個指定的文件,時間一長日誌的個頭很大,不利於日誌的分析。
使用腳本加上計劃任務進行定時切割:
mkdir -p /server/scripts/ #創建專門存放系統腳本的目錄
vim /server/scripts/cut_log_nginx.sh
#!/bin/bash
DateFormat=`date +%Y-%m-%d`
BaseDir="/application/nginx"
NginxDir="$BaseDir/logs/"
LogName="access_www"
[ -d $NginxDir ] && cd $NginxDir || exit 1
[ -f ${LogName}.log ] || exit 1
/bin/mv ${LogName}.log ${DateFormat}_${LogName}.log
$BaseDir/sbin/nginx -s reload
vim /var/spool/cron/root #編輯計劃任務文件
00 00 * * * /bin/bash /server/scrpits/cut_log_nginx.sh > /dev/null 2>&1
常見的日誌分析工具有:
rsyslog awstats flume ELK storm
本文出自 “帥帥的小哥哥” 博客,請務必保留此出處http://xvjunjie.blog.51cto.com/12360960/1955308
Nginx常用功能配置及優化