1、搭建時(shí)間服務(wù)器箫章,日志服務(wù)器并簡(jiǎn)述sudo安全切換
1)安裝ntp服務(wù)器
yum install ntp
配置文件內(nèi)容中server?表示以誰(shuí)為時(shí)間服務(wù)器烙荷,restrict?表示允許哪個(gè)IP的機(jī)器來(lái)同步我的時(shí)間。? 如果restrict后面指定自己127.0.0.1則不允許別人來(lái)同步時(shí)間(即只是做為客戶端檬寂,而不做為服務(wù)端)终抽。
192.168.80.20安裝ntp服務(wù)端
192.168.80.21安裝ntp客戶端
配置ntp服務(wù)端配置文件:/etc/ntp.conf
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
保持默認(rèn)的centos 官方的外網(wǎng)ntp地址:
restrict 192.168.80.21 (允許客戶端可以過(guò)來(lái)同步時(shí)間)
重啟ntp服務(wù)
systemctl restart ntpd
客戶端安裝ntp
yum install ntp
[root@localhost ~]# ntpdate 192.168.80.20
14 Jul 18:42:28 ntpdate[7212]: adjust time server 192.168.80.20 offset -0.006542 sec
出現(xiàn)以上提示表示時(shí)間服務(wù)同步成功。
2)日志服務(wù)器搭建
為了更好的管理應(yīng)用程序和操作系統(tǒng)的日志桶至,使用日志服務(wù)器進(jìn)行管理昼伴,我們需要用到rsyslog,它是由早期的syslog的升級(jí)版。它可以收集系統(tǒng)引導(dǎo)啟動(dòng)镣屹、應(yīng)用程序啟動(dòng)圃郊、應(yīng)用程序(尤其是服務(wù)類應(yīng)用程序)運(yùn)行過(guò)程中的事件。
記錄的格式為:事件產(chǎn)生日期和時(shí)間? 主機(jī)? 進(jìn)程PID? 事件內(nèi)容女蜈。
rsyslog的特性:多線程,支持TCP持舆、UDP、SSL伪窖、TLS逸寓、RELP協(xié)議「采剑可存儲(chǔ)信息于日志竹伸、mysql等數(shù)據(jù)庫(kù)管理系統(tǒng)⌒诼颍可以對(duì)日志信息進(jìn)行過(guò)濾,可以自定義輸出格式聊倔。
安裝rsyslog
yum install rsyslog -y
vim /etc/rsyslog.conf
主配置文件rsyslog.conf?主要由三個(gè)部分組成:?
MODULES? 表示加載的模塊列表
GLOBAL DIRECTIVES? ?表示全局的配置
RULES? ?表示日志記錄規(guī)則
其中:
MODULES段的格式為
$ModLoad? 模塊名稱
如果模塊名稱為im開(kāi)起表示輸入模塊晦毙,如果以om開(kāi)頭表示輸出模塊
GLOBAL DIRECTIVES?段主要定義一些常用設(shè)置,比如:
$WorkDirectory? 表示工作目錄
RULES?段的格式為:
facility.priority? target
其中
facility:設(shè)施耙蔑,從功能上或程序上對(duì)日志收集進(jìn)行分類见妒,如:auth,authpriv,cron,daemon,kern,lpr,mail,mark,news,security,user,uucp,local0~local7,syslog
priority:優(yōu)先級(jí),日志級(jí)別,如下(從左到右甸陌,由低到高):debug,info,notice,warn(warning),err(error),crit(critical),alert,emerg(panic)
指定級(jí)別的方式:
*:所有級(jí)別;
none:沒(méi)有級(jí)別;
priority:此級(jí)別以及高于此級(jí)別的所有級(jí)別)
=priority:僅此級(jí)別;
一般要求日志級(jí)別為warn须揣,即warn以及warn以上級(jí)別的日志要記錄盐股。
生產(chǎn)上一般不會(huì)開(kāi)debug級(jí)別的日志,因?yàn)槿罩居涗浱鄷?huì)導(dǎo)致io繁忙耻卡。
target:日志寫(xiě)入目標(biāo)
文件:把日志事件寫(xiě)入到指定的文件中疯汁,日志文件通常位于/var/log目錄下,
文件路徑前面加"-"表示異步寫(xiě)入文件;
用戶:將日志事件通知給指定的用戶卵酪,通過(guò)將信息發(fā)送給登錄到系統(tǒng)上的用戶的終端進(jìn)行的;
日志服務(wù)器:@host 幌蚊,把日志發(fā)送到指定的服務(wù)器主機(jī),
要保證host日志服務(wù)器在tcp或udp協(xié)議的514端口有監(jiān)聽(tīng)并提供日志服務(wù)溃卡。
管道:? | COMMAND? 送到某一命令進(jìn)行處理
注釋掉一下的內(nèi)容:
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
以上配置行的注釋去掉后就會(huì)開(kāi)啟對(duì)tcp和udp協(xié)議的514端口進(jìn)行監(jiān)聽(tīng)溢豆。
[root@localhost ~]# ss -tuln|grep 514
udp? ? UNCONN? ? 0? ? ? 0? ? ? ? *:514? ? ? ? ? ? ? ? ? *:*? ? ? ? ? ? ? ? ?
udp? ? UNCONN? ? 0? ? ? 0? ? ? ? :::514? ? ? ? ? ? ? ? ? :::*? ? ? ? ? ? ? ? ?
tcp? ? LISTEN? ? 0? ? ? 25? ? ? ? *:514? ? ? ? ? ? ? ? ? *:*? ? ? ? ? ? ? ? ?
tcp? ? LISTEN? ? 0? ? ? 25? ? ? :::514? ? ? ? ? ? ? ? ? :::*
此時(shí)服務(wù)器監(jiān)聽(tīng)TCP UDP 514號(hào)端口
此時(shí)配置客戶端IP地址:
*.info;mail.none;authpriv.none;cron.none? ? ? ? ? ? ? ? @192.168.80.20
把它的target?改為? @日志服務(wù)器IP
systemctl restart rsyslog
重啟配置文件
在客戶端重新再登錄一次客戶端服務(wù)器此時(shí)服務(wù)端會(huì)有日志顯示:如下
登錄時(shí)顯示:
Jul 14 18:54:26 localhost systemd: Started Session 2 of user root.
Jul 14 18:54:26 localhost systemd-logind: New session 2 of user root.
退出時(shí)顯示:
Jul 14 18:55:51 localhost systemd-logind: Removed session 2.
也可以把日志保存的mysql中
yum install rsyslog-mysql
安裝數(shù)據(jù)庫(kù):
yum install mariadb-server??mariadb
# vim? /etc/my.cnf.d/server.cnf
[mysqld]
skip_name_resolve=ON
innodb_file_per_table=ON
啟動(dòng)數(shù)據(jù)庫(kù)并導(dǎo)入數(shù)據(jù)
mysql -uroot -p < /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
此時(shí)自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù):Syslog
MariaDB [(none)]> grant all privileges on Syslog.* to 'rsyslog'@'localhost' identified by 'rsyspass';
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.03 sec)
vim /etc/rsyslog.conf
#### MODULES ####
$ModLoad ommysql
*.info;mail.none;authpriv.none;cron.none :ommysql:localhost,Syslog,rsyslog,rsyspass
內(nèi)容為:ommysql:數(shù)據(jù)庫(kù)主機(jī),數(shù)據(jù)庫(kù)名,數(shù)據(jù)庫(kù)用戶,數(shù)據(jù)庫(kù)密碼瘸羡。
# systemctl restart rsyslog.service
systemctl status rsyslog.service
Jul 14 19:27:10 localhost.localdomain rsyslogd[18210]: [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="18210" x-inf... start
Jul 14 19:27:10 localhost.localdomain systemd[1]: Started System Logging Service.
*************************** 8. row ***************************
? ? ? ? ? ? ? ? ID: 8
? ? ? ? CustomerID: NULL
? ? ? ? ReceivedAt: 2019-07-14 19:28:58
DeviceReportedTime: 2019-07-14 19:28:58
? ? ? ? ? Facility: 3
? ? ? ? ? Priority: 6
? ? ? ? ? FromHost: localhost
? ? ? ? ? Message:? Started Session 4 of user root.
? ? ? ? NTSeverity: NULL
? ? ? ? Importance: NULL
? ? ? EventSource: NULL
? ? ? ? EventUser: NULL
? ? EventCategory: NULL
? ? ? ? ? EventID: NULL
? EventBinaryData: NULL
? ? ? MaxAvailable: NULL
? ? ? ? CurrUsage: NULL
? ? ? ? ? MinUsage: NULL
? ? ? ? ? MaxUsage: NULL
? ? ? ? InfoUnitID: 1
? ? ? ? SysLogTag: systemd:
? ? ? EventLogType: NULL
? GenericFileName: NULL
? ? ? ? ? SystemID: NULL
8 rows in set (0.00 sec)
3)sudo?安全切換
sudo?能夠讓獲得授權(quán)的用戶以另外一個(gè)用戶(一般為root用戶)的身份運(yùn)行指定的命令
授權(quán)配置文件/etc/sudoers漩仙,但是一般使用visudo命令進(jìn)行編輯。
users? hosts=(runas)? ?commands
含義是犹赖,users列表中的用戶(組)队他,可以在hosts列表的位置上,以runas用戶的身份來(lái)運(yùn)行commands命令列表中的命令冷尉。
各個(gè)字段可能的值為:
users:? sudo命令的發(fā)起用戶
用戶名?或uid
%用戶組名? 或%gid? ?(這里要注意用戶需把基本組切換為該用戶組漱挎,才能使用sudo)
User_Alias 用戶別名
hosts:? 允許的地址
ip地址
主機(jī)名
NetAddr
Host_Alias?主機(jī)別名
runas:? ?以某一用戶的身份執(zhí)行
用戶名?或uid
Runas_Alias 用戶別名
commands:?指定的命令列表
command(命令建議使用完整的絕對(duì)路徑)
!command?表示禁止某一命令
directory
sudoedit:特殊權(quán)限雀哨,可用于向其它用戶授予sudo權(quán)限
Cmnd_Alias? ? 命令別名
這幾個(gè)字段中hosts磕谅,runas, commands都可以用ALL來(lái)表示所有。
定義別名的方法:
ALIAS_TYPE NAME=item1,item2,item3,...
NAME:別名名稱雾棺,必須使用全大寫(xiě)字符
ALIAS_TYPE :User_Alias膊夹,Host_Alias,Runas_Alias 捌浩,Cmnd_Alias
sodu命令執(zhí)行時(shí)會(huì)要求用戶輸入自己的密碼稽犁,為了避免頻繁驗(yàn)密與安全其見(jiàn),能記錄成功認(rèn)證結(jié)果一段時(shí)間涵妥,默認(rèn)為5分鐘沈堡,即5分鐘內(nèi)不需要再驗(yàn)證用戶密碼。
以sudo的方式來(lái)運(yùn)行指定的命令
sudo? ?[options]? COMMAND
-l? 列出sudo配置文件中用戶能執(zhí)行的命令
-k? 清除此前緩存用戶成功認(rèn)證結(jié)果浪听,之后再次運(yùn)行sudo時(shí)要驗(yàn)證用戶密碼螟碎。
如果想要讓用戶輸入部分命令時(shí)不需要進(jìn)行密碼驗(yàn)證,在sudo配置文件中commands列表部分迹栓,可以在命令列表前面加上"NOPASSWD"掉分,則其后的命令不需要密碼,如果某些命令又需要密碼就在前面加上“PASSWD”,所以commands列表可以為這種格式:
NOPASSWD? 不需要密碼的命令列表??PASSWD? 需要密碼的命令列表
安全提示:在sudo配置文件中
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
上面配置中root用戶這行沒(méi)有問(wèn)題酥郭,但是%wheel這行要注意华坦,如果把某用戶加入到%wheel組,當(dāng)用戶把基本組切換為wheel組時(shí)就可以像root用戶一樣運(yùn)行命令,較有風(fēng)險(xiǎn)的命令舉例如下:
sudo su - root? ? 不需要密碼就可以切換到root用戶
sudo? passwd? root? ? 修改root用戶密碼不从,不需要輸入原密碼惜姐。
建議把%wheel改為
%wheel ALL=(ALL)? ?ALL,!/bin/su,!/usr/bin/passwd root
2、詳解nginx模塊使用方法
nginx的特性之一就是模塊化設(shè)計(jì)消返,有較好的擴(kuò)展性载弄。
其模塊分類如下:
核心模塊:core module
標(biāo)準(zhǔn)模塊:
HTTP 模塊: ngx_http_*
HTTP Core modules?? 默認(rèn)功能
HTTP Optional modules 需編譯時(shí)指定
Mail 模塊? ? ngx_mail_*
Stream 模塊 ngx_stream_*
第三方模塊
1.核心模塊:
#user? nobody;? ?指定worker進(jìn)程的運(yùn)行身份,如組不指定撵颊,默認(rèn)和用戶名同名
worker_processes? 1|auto;? 指定worker進(jìn)程的數(shù)量宇攻;通常應(yīng)該為當(dāng)前主機(jī)的cpu的物理核心數(shù)
include? path/to/file? ?指明包含進(jìn)來(lái)的其它配置文件片斷
worker_cpu_affinity auto [cpumask] 提高緩存命中率
CPU MASK:
00000001:0號(hào)CPU
00000010:1號(hào)CPU
10000000:8號(hào)CPU
worker_priority number?? 指定worker進(jìn)程的nice值,設(shè)定worker進(jìn)程優(yōu)先級(jí):[-20,20]
#error_log file [level]?? ??錯(cuò)誤日志文件及其級(jí)別倡勇;出于調(diào)試需要逞刷,可設(shè)定為debug;但debug僅在編譯時(shí) 使用了“--with-debug”選項(xiàng)時(shí)才有效
#error_log? logs/error.log? notice;
#error_log? logs/error.log? info;
#pid? ? ? ? logs/nginx.pid;??指定存儲(chǔ)nginx主進(jìn)程PID的文件路徑
events {
worker_connections? 1024;??每個(gè)worker進(jìn)程所能夠打開(kāi)的最大并發(fā)連接數(shù)數(shù)量
use method? ?指明并發(fā)連接請(qǐng)求的處理方法 ,默認(rèn)自動(dòng)選擇最優(yōu)方法 妻熊,如夸浅, use epoll
accept_mutex on | off??處理新的連接請(qǐng)求的方法;on指由各個(gè)worker輪流處理新請(qǐng)求扔役,Off指每個(gè)新請(qǐng) 求的到達(dá)都會(huì)通知(喚醒)所有的worker進(jìn)程帆喇,但只有一個(gè)進(jìn)程可獲得連接,影響性能
}
#daemon on|off??是否以守護(hù)進(jìn)程方式運(yùn)行nignx亿胸,默認(rèn)是守護(hù)進(jìn)程方式
#master_process on|off? ? ?是否以master/worker模型運(yùn)行nginx坯钦;默認(rèn)為on,off 將不啟動(dòng)worker
2.HTTP Core modules模塊的配置使用:
(1)與套接字相關(guān)的配置:
server { ... }? 配置一個(gè)虛擬主機(jī)
server {
listen address[:PORT]|PORT;
server_name SERVER_NAME;
root /PATH/TO/DOCUMENT_ROOT;
}
listen:
listen? port??指令監(jiān)聽(tīng)在不同的端口
listen IP:PORT;? IP 地址不同
同時(shí)listen子句還支持一些可選的選項(xiàng):
●default_server? 設(shè)定為默認(rèn)虛擬主機(jī)
●ssl? ?? 限制僅能夠通過(guò)ssl連接提供服務(wù)
●backlog=number? 超過(guò)并發(fā)連接數(shù)后侈玄,新請(qǐng)求進(jìn)入后援隊(duì)列的長(zhǎng)度
●rcvbuf=size?? 接收緩沖區(qū)大小
●sndbuf=size?? 發(fā)送緩沖區(qū)大小
server_name:
指令指向不同的主機(jī)名婉刀,虛擬主機(jī)的主機(jī)名稱后可跟多個(gè)由空白字符分隔的字符串 ,
支持*通配任意長(zhǎng)度的任意字符?如:*aaa(左側(cè)通配符)bbb*(右側(cè)通配符)
支持~起始的字符做正則表達(dá)式模式匹配序仙,性能原因慎用
匹配優(yōu)先級(jí):字符串精確匹配 >?左側(cè)通配符 >右側(cè)通配符>正則表達(dá)式>default_server
tcp_nodelay?on | off;
在keepalived模式下的連接是否啟用TCP_NODELAY選項(xiàng)
當(dāng)為off時(shí)突颊,延遲發(fā)送,合并多個(gè)請(qǐng)求后再發(fā)送
默認(rèn)On時(shí)潘悼,不延遲發(fā)送
可用于:http, server, location
sendfile on | off;
是否啟用sendfile功能律秃,在內(nèi)核中封裝報(bào)文直接發(fā)送? 默認(rèn)Off
server_tokens?on | off | build | string
是否在響應(yīng)報(bào)文的Server首部顯示nginx版本
(2)定義路徑相關(guān)的配置:
root
設(shè)置web資源的路徑映射;用于指明請(qǐng)求的URL所對(duì)應(yīng)的文檔的目錄路徑治唤,可用于server
若配置:root? /path/to/dir
則http://servername/aaa/bbb.jpg? 映射的訪問(wèn)地址就是? ?/path/to/dir/aaa/bbb.jpg
location
在一個(gè)server中l(wèi)ocation配置段可存在多個(gè)棒动,用于實(shí)現(xiàn)從uri到文件系統(tǒng)的路 徑映射;ngnix會(huì)根據(jù)用戶請(qǐng)求的URI來(lái)檢查定義的所有l(wèi)ocation肝劲,并找出一個(gè)最 佳匹配迁客,而后應(yīng)用其配置 。
location? 操作符?uri? ?{...}
操作符有:
=:對(duì)uri精確匹配
^~:對(duì)URI的最左邊部分做匹配檢查辞槐,不區(qū)分字符大小寫(xiě)
~:對(duì)URI做正則表達(dá)式模式匹配掷漱,區(qū)分字符大小寫(xiě)
~*: 對(duì)URI做正則表達(dá)式模式匹配,不區(qū)分字符大小寫(xiě)
不帶符號(hào):匹配起始于此uri的所有的uri
匹配優(yōu)先級(jí)從高到低:? ??=, ^~, ~/~*, 不帶符號(hào)
alias? ?path
路徑別名榄檬,文檔映射的另一種機(jī)制卜范;僅能用于location上下文
注意:location中使用root指令和alias指令的意義不同
root,用來(lái)指定根目錄鹿榜,故把uri做為子目錄繼續(xù)按路徑找文件海雪。給定的路徑對(duì)應(yīng)于location中的/uri/左側(cè)的/
alias,用來(lái)定義路徑別名舱殿,故用來(lái)替換uri來(lái)指名路徑奥裸,再繼續(xù)按路徑找文件,給定的路徑對(duì)應(yīng)于location中的/uri/右側(cè)的/
index file ...;
指定默認(rèn)網(wǎng)頁(yè)文件(又稱歡迎頁(yè)面)當(dāng)未指定路徑下的哪個(gè)文件時(shí)沪袭,此頁(yè)面為默認(rèn)文件湾宙,注意需要:ngx_http_index_module模塊
error_page code ... [=[response]] uri;
需要模塊:ngx_http_core_module
定義錯(cuò)誤頁(yè),以指定的響應(yīng)狀態(tài)碼進(jìn)行 響應(yīng)
可用位置:http, server, location, if in location
例如: error_page? 404? /404.html
try_files
try_files file ... uri;
或 try_files file ... =code;
按順序檢查文件是否存在冈绊,返回第一個(gè)找到的文件或文件夾(結(jié)尾加斜線表示 為文件夾)侠鳄,如果所有的文件或文件夾都找不到,會(huì)進(jìn)行一個(gè)內(nèi)部重定向到最 后一個(gè)參數(shù)死宣。只有最后一個(gè)參數(shù)可以引起一個(gè)內(nèi)部重定向伟恶,之前的參數(shù)只設(shè)置 內(nèi)部URI的指向。最后一個(gè)參數(shù)是回退URI且必須存在毅该,否則會(huì)出現(xiàn)內(nèi)部500錯(cuò)誤博秫。
(3)? 定義客戶端請(qǐng)求的相關(guān)配置
keepalive_timeout timeout [header_timeout];
設(shè)定保持連接超時(shí)時(shí)長(zhǎng),0表示禁止長(zhǎng)連接鹃骂,默認(rèn)為75s
keepalive_requests?number;
在一次長(zhǎng)連接上所允許請(qǐng)求的資源的最大數(shù)量? 默認(rèn)為100
keepalive_disable none | browser ...
對(duì)哪種瀏覽器禁用長(zhǎng)連接
send_timeout time;
向客戶端發(fā)送響應(yīng)報(bào)文的超時(shí)時(shí)長(zhǎng)台盯,此處是指兩次寫(xiě)操作之間的間隔時(shí)長(zhǎng), 而非整個(gè)響應(yīng)過(guò)程的傳輸時(shí)長(zhǎng)
client_body_buffer_size size;
用于接收每個(gè)客戶端請(qǐng)求報(bào)文的body部分的緩沖區(qū)大形废摺静盅;默認(rèn)為16k;超 出此大小時(shí)寝殴,其將被暫存到磁盤(pán)上的由下面client_body_temp_path指令所定義 的位置
client_body_temp_path path [level1 [level2 [level3]]];
設(shè)定存儲(chǔ)客戶端請(qǐng)求報(bào)文的body部分的臨時(shí)存儲(chǔ)路徑及子目錄結(jié)構(gòu)和數(shù)量? ? ? 目錄名為16進(jìn)制的數(shù)字蒿叠;
(4)對(duì)客戶端進(jìn)行限制的相關(guān)配置
limit_rate rate;
限制響應(yīng)給客戶端的傳輸速率,單位是bytes/second? 默認(rèn)值0表示無(wú)限制
limit_except method ... { ... }蚣常,
僅用于location? 限制客戶端使用除了指定的請(qǐng)求方法之外的其它方法
method可以是:GET, HEAD, POST, PUT, DELETE市咽,MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH
例如:
limit_except GET {
allow 192.168.1.0/24;
deny? all;? }
表示 除了GET之外其它方法僅允許192.168.1.0/24網(wǎng)段主機(jī)使用
(5)文件操作優(yōu)化的配置
aio on | off | threads[=pool];
是否啟用aio功能
directio size | off;
當(dāng)文件大于等于給定大小時(shí),例如directio 4m抵蚊,同步(直接)寫(xiě)磁盤(pán)施绎,而非寫(xiě)緩存
open_file_cache off;
open_file_cache max=N [inactive=time];
nginx可以緩存以下三種信息:? (1) 文件元數(shù)據(jù):文件的描述符溯革、文件大小和最近一次的修改時(shí)間? (2) 打開(kāi)的目錄結(jié)構(gòu)? (3) 沒(méi)有找到的或者沒(méi)有權(quán)限訪問(wèn)的文件的相關(guān)信息
max=N:可緩存的緩存項(xiàng)上限;達(dá)到上限后會(huì)使用LRU算法實(shí)現(xiàn)管理
inactive=time:緩存項(xiàng)的非活動(dòng)時(shí)長(zhǎng)谷醉,在此處指定的時(shí)長(zhǎng)內(nèi)未被命中的或命中的次 數(shù)少于open_file_cache_min_uses指令所指定的次數(shù)的緩存項(xiàng)即為非活動(dòng)項(xiàng)致稀,將被刪除
open_file_cache_errors on | off;
是否緩存查找時(shí)發(fā)生錯(cuò)誤的文件一類的信息? 默認(rèn)值為off
open_file_cache_min_uses number;
open_file_cache指令的inactive參數(shù)指定的時(shí)長(zhǎng)內(nèi),至少被命中此處指定 的次數(shù)方可被歸類為活動(dòng)項(xiàng)? 默認(rèn)值為1
open_file_cache_valid time;
緩存項(xiàng)有效性的檢查頻率? 默認(rèn)值為60s
3.ngx_http_access_module模塊 的配置使用:
可實(shí)現(xiàn)基于ip的訪問(wèn)控制功能
allow address | CIDR | unix: | all;
deny address | CIDR | unix: | all;
用于 http, server, location, limit_except?上下文
自上而下檢查俱尼,一旦匹配抖单,將生效,條件嚴(yán)格的置前
4.ngx_http_auth_basic_module模塊的配置使用:
實(shí)現(xiàn)基于用戶的訪問(wèn)控制遇八,使用basic機(jī)制進(jìn)行用戶認(rèn)證
auth_basic string | off;
auth_basic_user_file file;
用戶口令文件:
1矛绘、明文文本:格式name:password:comment
2、加密文本:由htpasswd命令實(shí)現(xiàn)刃永,此命令由httpd-tools所提供
5.ngx_http_stub_status_module模塊的配置使用:
用于輸出nginx的基本狀態(tài)信息
stub_status;?表示返回基本狀態(tài)信息货矮,信息含義如下:
Active connections:當(dāng)前狀態(tài),活動(dòng)狀態(tài)的連接數(shù)
accepts:統(tǒng)計(jì)總值斯够,已經(jīng)接受的客戶端請(qǐng)求的總數(shù)
handled:統(tǒng)計(jì)總值次屠,已經(jīng)處理完成的客戶端請(qǐng)求的總數(shù)
requests:統(tǒng)計(jì)總值,客戶端發(fā)來(lái)的總的請(qǐng)求數(shù)
Reading:當(dāng)前狀態(tài)雳刺,正在讀取客戶端請(qǐng)求報(bào)文首部的連接的連接數(shù)
Writing:當(dāng)前狀態(tài)劫灶,正在向客戶端發(fā)送響應(yīng)報(bào)文過(guò)程中的連接數(shù)
Waiting:當(dāng)前狀態(tài),正在等待客戶端發(fā)出請(qǐng)求的空閑連接數(shù)
6.ngx_http_log_module模塊 的配置使用:
指定日志格式記錄請(qǐng)求
log_format name string ...;
指定日志格式的名稱掖桦,以及對(duì)應(yīng)的格式字符串本昏。string可以使用nginx核心模塊及其它模塊內(nèi)嵌的變量
access_log
訪問(wèn)日志文件路徑,格式及相關(guān)的緩沖的配置access_log? path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
open_log_file_cache
緩存各日志文件相關(guān)的元數(shù)據(jù)信息
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
max:緩存的最大文件描述符數(shù)量
min_uses:在inactive指定的時(shí)長(zhǎng)內(nèi)訪問(wèn)大于等于此值方可被當(dāng)作活動(dòng)項(xiàng)
inactive:非活動(dòng)時(shí)長(zhǎng)
valid:驗(yàn)證緩存中各緩存項(xiàng)是否為活動(dòng)項(xiàng)的時(shí)間間隔
7.ngx_http_gzip_module 模塊?的配置使用:
用gzip方法壓縮響應(yīng)數(shù)據(jù)枪汪,節(jié)約帶寬
gzip on | off;? ? 啟用或禁用gzip壓縮
gzip_comp_level level;? ? 壓縮比由低到高:1 到 9? 默認(rèn):1
gzip_disable regex ...;? ? 匹配到客戶端瀏覽器不執(zhí)行壓縮
gzip_min_length length;? ? 啟用壓縮功能的響應(yīng)報(bào)文大小閾值
gzip_http_version 1.0 | 1.1;? ? 設(shè)定啟用壓縮功能時(shí)涌穆,協(xié)議的最小版本? 默認(rèn):1.1
gzip_buffers number size;? ? 支持實(shí)現(xiàn)壓縮功能時(shí)緩沖區(qū)數(shù)量及每個(gè)緩存區(qū)的大小? 默認(rèn):32 4k 或 16 8k
gzip_types mime-type ...;? ? 指明僅對(duì)哪些類型的資源執(zhí)行壓縮操作;即壓縮過(guò)濾器
默認(rèn)包含有text/html雀久,不用顯示指定宿稀,否則出錯(cuò)
gzip_vary on | off;? ? ?如果啟用壓縮,是否在響應(yīng)報(bào)文首部插入“Vary: Accept-Encoding”
gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
nginx充當(dāng)代理服務(wù)器時(shí)赖捌,對(duì)于后端服務(wù)器的響應(yīng)報(bào)文祝沸,在何種條件下啟 用壓縮功能
off:不啟用壓縮
expired,no-cache, no-store越庇,private:對(duì)后端服務(wù)器的響應(yīng)報(bào)文首部 Cache-Control值任何一個(gè)罩锐,啟用壓縮功能
8.ngx_http_ssl_module模塊?的配置使用:
ssl on | off;
為指定虛擬機(jī)啟用HTTPS protocol, 建議用listen指令代替
ssl_certificate file;
當(dāng)前虛擬主機(jī)使用PEM格式的證書(shū)文件
ssl_certificate_key file;
當(dāng)前虛擬主機(jī)上與其證書(shū)匹配的私鑰文件
ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
支持ssl協(xié)議版本卤唉,默 認(rèn)為后三個(gè)
ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
none:? 通知客戶端支持ssl session cache涩惑,但實(shí)際不支持
builtin[:size]:使用OpenSSL內(nèi)建緩存,為每worker進(jìn)程私有
[shared:name:size]:在各worker之間使用一個(gè)共享的緩存
ssl_session_timeout time;
客戶端連接可以復(fù)用ssl session cache中緩存的ssl參數(shù)的有效時(shí)長(zhǎng)桑驱,默認(rèn)5m
9.ngx_http_rewrite_module模塊的配置使用:
將用戶請(qǐng)求的URI基于PCRE regex所描述的模式進(jìn)行檢查竭恬,而后完成重定向替換
rewrite regex replacement [flag]
將用戶請(qǐng)求的URI基于regex所描述的模式進(jìn)行檢查跛蛋,匹配到時(shí)將其替換為 replacement指定的新的URI
注意:如果在同一級(jí)配置塊中存在多個(gè)rewrite規(guī)則,那么會(huì)自上而下逐個(gè) 檢查痊硕;被某條件規(guī)則替換完成后问芬,會(huì)重新一輪的替換檢查
隱含有循環(huán)機(jī)制,但不超過(guò)10次;如果超過(guò)寿桨,提示500響應(yīng)碼,[flag]所表示 的標(biāo)志位用于控制此循環(huán)機(jī)制
如果replacement是以http://或https://開(kāi)頭强戴,則替換結(jié)果會(huì)直接以重向返 回給客戶端, 即永久重定向301
[flag]:
last:重寫(xiě)完成后停止對(duì)當(dāng)前URI在當(dāng)前l(fā)ocation中后續(xù)的其它重寫(xiě)操作亭螟, 而后對(duì)新的URI啟動(dòng)新一輪重寫(xiě)檢查;提前重啟新一輪循環(huán)骑歹,不建議在location中 使用
break:重寫(xiě)完成后停止對(duì)當(dāng)前URI在當(dāng)前l(fā)ocation中后續(xù)的其它重寫(xiě)操作预烙, 而后直接跳轉(zhuǎn)至重寫(xiě)規(guī)則配置塊之后的其它配置;結(jié)束循環(huán)道媚,建議在location中使 用
redirect:臨時(shí)重定向扁掸,重寫(xiě)完成后以臨時(shí)重定向方式直接返回重寫(xiě)后生成 的新URI給客戶端,由客戶端重新發(fā)起請(qǐng)求最域;使用相對(duì)路徑,或者h(yuǎn)ttp://或https:// 開(kāi)頭谴分,狀態(tài)碼:302
permanent:重寫(xiě)完成后以永久重定向方式直接返回重寫(xiě)后生成的新URI給 客戶端,由客戶端重新發(fā)起請(qǐng)求镀脂,狀態(tài)碼:301
return
return code [text];
return code URL;
return URL;
停止處理牺蹄,并返回給客戶端指定的響應(yīng)碼
rewrite_log on | off;
是否開(kāi)啟重寫(xiě)日志, 發(fā)送至error_log(notice level)
set $variable value;
用戶自定義變量
注意:變量定義和調(diào)用都要以$開(kāi)頭
if (condition) { ... }
條件滿足時(shí),執(zhí)行配置塊中的配置指令薄翅;server, location
condition:
比較操作符:
=? 相同? ? !=?? 不同
~:模式匹配沙兰,區(qū)分字符大小寫(xiě)
~*:模式匹配,不區(qū)分字符大小寫(xiě)
!~:模式不匹配翘魄,區(qū)分字符大小寫(xiě)
!~*:模式不匹配鼎天,不區(qū)分字符大小寫(xiě)
文件及目錄存在性判斷:
-e, !-e 存在(包括文件,目錄暑竟,軟鏈接)
-f, !-f? 文件? -d, !-d? 目錄? -x, !-x? 執(zhí)行
10.ngx_http_referer_module模塊的配置使用:
用來(lái)阻止Referer首部無(wú)有效值的請(qǐng)求訪問(wèn)斋射,可防止盜鏈
valid_referers none|blocked|server_names|string ...;
定義referer首部的合法可用值,不能匹配的將是非法值
none:請(qǐng)求報(bào)文首部沒(méi)有referer首部
blocked:請(qǐng)求報(bào)文有referer首部但荤,但無(wú)有效值
server_names:參數(shù)绩鸣,其可以有值作為主機(jī)名或主機(jī)名模式
arbitrary_string:任意字符串,但可使用*作通配符
regular expression:被指定的正則表達(dá)式模式匹配到的字符串,要使用~開(kāi)頭
11.ngx_http_proxy_module 模塊的配置使用:
轉(zhuǎn)發(fā)請(qǐng)求至另一臺(tái)主機(jī)
proxy_pass URL;
可用于location上下文纱兑,例如:
server {
...
server_name HOSTNAME;
location /uri/ {
proxy_pass http://host[:port];? ?(注意: 最后沒(méi)有/)
}
...
}
上面示例:http://HOSTNAME/uri --> http://host/uri
如果上面示例中有 /呀闻,即:http://host[:port]/?? 意味著:http://HOSTNAME/uri --> http://host/? 即置換
注意:proxy_pass后面路徑不帶uri時(shí),會(huì)將location的uri傳遞(附加)給后端主機(jī) 潜慎,
proxy_pass后面的路徑是一個(gè)uri時(shí)捡多,其會(huì)將location的uri替換為proxy_pass的 uri
如果location定義其uri時(shí)使用了正則表達(dá)式的模式蓖康,則proxy_pass之后必須不 能使用uri; 用戶請(qǐng)求時(shí)傳遞的uri將直接附加至后端服務(wù)器之后
proxy_set_header field value;
設(shè)定發(fā)往后端主機(jī)的請(qǐng)求報(bào)文的請(qǐng)求首部的值
適用于上下文:http, server, location
proxy_set_header X-Real-IP? $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
請(qǐng)求報(bào)文的標(biāo)準(zhǔn)格式如下:
X-Forwarded-For: client1, proxy1, proxy2
proxy_cache_path;
定義可用于proxy功能的緩存;
適用于上下文:http
proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
proxy_cache zone | off; 默認(rèn)off
指明調(diào)用的緩存垒手,或關(guān)閉緩存機(jī)制蒜焊;
適用于上下文:http, server, location
????????proxy_cache_key string;
緩存中用于“鍵”的內(nèi)容
默認(rèn)值:proxy_cache_key $scheme$proxy_host$request_uri;
proxy_cache_valid [code ...] time;
定義對(duì)特定響應(yīng)碼的響應(yīng)內(nèi)容的緩存時(shí)長(zhǎng)
適用于上下文:http
proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off
在被代理的后端服務(wù)器出現(xiàn)哪種情況下,可直接使用過(guò)期的緩存響應(yīng)客戶端
proxy_cache_methods GET | HEAD | POST ...;
對(duì)哪些客戶端請(qǐng)求方法對(duì)應(yīng)的響應(yīng)進(jìn)行緩存科贬,GET和HEAD方法總是被緩存
proxy_hide_header field;
默認(rèn)nginx在響應(yīng)報(bào)文中不傳遞后端服務(wù)器的首部字段Date, Server, X-Pad,? X-Accel-等泳梆,用于隱藏后端服務(wù)器特定的響應(yīng)首部
proxy_connect_timeout time;
定義與后端服務(wù)器建立連接的超時(shí)時(shí)長(zhǎng),如超時(shí)會(huì)出現(xiàn)502錯(cuò)誤榜掌,默認(rèn)為 60s优妙,一般不建議超出75s
proxy_send_timeout time;
將請(qǐng)求發(fā)送給后端服務(wù)器的超時(shí)時(shí)長(zhǎng);默認(rèn)為60s
proxy_read_timeout time;
等待后端服務(wù)器發(fā)送響應(yīng)報(bào)文的超時(shí)時(shí)長(zhǎng)憎账,默認(rèn)為60s
12.ngx_http_headers_module模塊 的配置使用:
向由代理服務(wù)器響應(yīng)給客戶端的響應(yīng)報(bào)文添加自定義首部套硼,或修改指定首部的 值
?? ? ? ?add_header name value [always];
添加自定義首部
add_header X-Via? $server_addr;
add_header X-Cache $upstream_cache_status;
add_header X-Accel $server_name;
?? ? ? ?add_trailer name value [always];
添加自定義響應(yīng)信息的尾部
13.ngx_http_fastcgi_module模塊 的配置使用:
轉(zhuǎn)發(fā)請(qǐng)求到FastCGI服務(wù)器,不支持php模塊方式
?? ? ? ?fastcgi_pass address;
address為后端的fastcgi server的地址
可用位置:location, if in location
?? ? ? ?fastcgi_index name;
fastcgi默認(rèn)的主頁(yè)資源
?? ? ? ?fastcgi_param parameter value [if_not_empty];
設(shè)置傳遞給 FastCGI服務(wù)器的參數(shù)值胞皱,可以是文本邪意,變量或組合
fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
定義fastcgi的緩存;
path?? 緩存位置為磁盤(pán)上的文件系統(tǒng)
max_size=size?? 磁盤(pán)path路徑中用于緩存數(shù)據(jù)的緩存空間上限
levels=levels:緩存目錄的層級(jí)數(shù)量反砌,以及每一級(jí)的目錄數(shù)量? ?? levels=ONE:TWO:THREE
keys_zone=name:size? ? ?k/v映射的內(nèi)存空間的名稱及大小
inactive=time?? 非活動(dòng)時(shí)長(zhǎng)
fastcgi_cache zone | off;
調(diào)用指定的緩存空間來(lái)緩存數(shù)據(jù)
可用位置:http, server, location
? ? ? ? ??fastcgi_cache_key string;
定義用作緩存項(xiàng)的key的字符串
? ? ? ? ??fastcgi_cache_methods GET | HEAD | POST ...;
為哪些請(qǐng)求方法使用緩存
? ? ? ? ??fastcgi_cache_min_usesnumber;
緩存空間中的緩存項(xiàng)在inactive定義的非活動(dòng)時(shí)間內(nèi)至少要被訪問(wèn)到此處所指定的次數(shù)方 可被認(rèn)作活動(dòng)項(xiàng)
? ? ? ? ??fastcgi_keep_connon | off;
收到后端服務(wù)器響應(yīng)后雾鬼,fastcgi服務(wù)器是否關(guān)閉連接,建議啟用長(zhǎng)連接
? ? ? ? ??fastcgi_cache_valid [code ...] time;
不同的響應(yīng)碼各自的緩存時(shí)長(zhǎng)
14.ngx_http_upstream_module模塊?的配置使用:
用于將多個(gè)服務(wù)器定義成服務(wù)器組宴树,而由proxy_pass, fastcgi_pass等指令 進(jìn)行引用
upstream name { ... }
定義后端服務(wù)器組呆贿,會(huì)引入一個(gè)新的上下文
默認(rèn)調(diào)度算法是wrr
可用位置: http
例如:
upstream httpdsrvs {
server ...
server...
...
}
server address [parameters];
在upstream上下文中server成員,以及相關(guān)的參數(shù)森渐;
可用位置upstream
address的表示格式:
unix:/PATH/TO/SOME_SOCK_FILE
IP[:PORT]
HOSTNAME[:PORT]
parameters:
weight=number? 權(quán)重做入,默認(rèn)為1
max_conns? 連接后端報(bào)務(wù)器最大并發(fā)活動(dòng)連接數(shù),1.11.5后支持
max_fails=number 失敗嘗試最大次數(shù)同衣;超出此處指定的次數(shù)時(shí)竟块,server將被標(biāo) 記為不可用,默認(rèn)為1
fail_timeout=time? 后端服務(wù)器標(biāo)記為不可用狀態(tài)的連接超時(shí)時(shí)長(zhǎng),默認(rèn)10s
backup 將服務(wù)器標(biāo)記為“備用”耐齐,即所有服務(wù)器均不可用時(shí)才啟用
down 標(biāo)記為“不可用”浪秘,配合ip_hash使用,實(shí)現(xiàn)灰度發(fā)布
ip_hash
源地址hash調(diào)度方法
least_conn 最少連接調(diào)度算法埠况,當(dāng)server擁有不同的權(quán)重時(shí)其為wlc耸携, 當(dāng)所有后端主機(jī)連接數(shù)相同時(shí),則使用wrr辕翰,適用于長(zhǎng)連接
hash key [consistent] 基于指定的key的hash表來(lái)實(shí)現(xiàn)對(duì)請(qǐng)求的調(diào)度夺衍, 此處的key可以直接文本、變量或二者組合
作用:將請(qǐng)求分類喜命,同一類請(qǐng)求將發(fā)往同一個(gè)upstream server沟沙,使用 consistent參數(shù)河劝,將使用ketama一致性hash算法,適用于后端是Cache服務(wù)器 (如varnish)時(shí)使用
hash $request_uri consistent;
hash $remote_addr;
keepalive 連接數(shù)N;
為每個(gè)worker進(jìn)程保留的空閑的長(zhǎng)連接數(shù)量,可節(jié)約nginx端口矛紫,并減少連 接管理的消耗
health_check [parameters];
健康狀態(tài)檢測(cè)機(jī)制赎瞎;只能用于location上下文
常用參數(shù):
interval=time檢測(cè)的頻率,默認(rèn)為5秒
fails=number:判定服務(wù)器不可用的失敗檢測(cè)次數(shù)颊咬;默認(rèn)為1次
passes=number:判定服務(wù)器可用的失敗檢測(cè)次數(shù)务甥;默認(rèn)為1次
uri=uri:做健康狀態(tài)檢測(cè)測(cè)試的目標(biāo)uri;默認(rèn)為/
match=NAME:健康狀態(tài)檢測(cè)的結(jié)果評(píng)估調(diào)用此處指定的match配置塊
注意:僅對(duì)nginx plus有效
match name { ... }
對(duì)backend server做健康狀態(tài)檢測(cè)時(shí)喳篇,定義其結(jié)果判斷機(jī)制敞临;只能用于http上下 文
常用的參數(shù):
status? code[? code ...]: 期望的響應(yīng)狀態(tài)碼
header? HEADER[operator? value]:期望存在響應(yīng)首部,也可對(duì)期望的響 應(yīng)首部的值基于比較操作符和值進(jìn)行比較
body:期望響應(yīng)報(bào)文的主體部分應(yīng)該有的內(nèi)容
注意:僅對(duì)nginx plus有效
15.ngx_stream_core_module模塊 的配置使用:
模擬反代基于tcp或udp的服務(wù)連接杭隙,即工作于傳輸層的反代或調(diào)度器
stream { ... }
定義stream相關(guān)的服務(wù);
用于上下文:main
stream {
upstream mysqlsrvs {
server 192.168.22.2:3306;
server 192.168.22.3:3306;
least_conn;
}
server {
listen 10.1.0.6:3306;
proxy_pass mysqlsrvs;
}
}
listen
listen address:port [ssl] [udp] [proxy_protocol] [backlog=number] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
16.ngx_stream_proxy_module模塊 ?的配置使用:
可實(shí)現(xiàn)代理基于TCP因妙,UDP (1.9.13), UNIX-domain sockets的數(shù)據(jù)流
proxy_pass address;
指定后端服務(wù)器地址
proxy_timeout timeout;
無(wú)數(shù)據(jù)傳輸時(shí)痰憎,保持連接狀態(tài)的超時(shí)時(shí)長(zhǎng)?? 默認(rèn)為10m
proxy_connect_timeout time;
設(shè)置nginx與被代理的服務(wù)器嘗試建立連接的超時(shí)時(shí)長(zhǎng)? 默認(rèn)為60s