摘要:作為反向代理的時(shí)候啟用,決定開(kāi)啟或者關(guān)閉后端服務(wù)器返回的結(jié)果是否壓縮,匹配的前提是后端服務(wù)器必須要返回包含的頭。
軟件介紹
與 Apache軟件類(lèi)似, Nginx ( “engme x")是一個(gè)開(kāi)源的,支持高性能、高并發(fā)的 WWW服務(wù)器和代理服務(wù)軟件。它是由俄羅斯人 Igor Sysoev開(kāi)發(fā)的,最初被應(yīng)用在勘羅斯的大型網(wǎng)站 www.rambler.ru 上,后來(lái)作者將源代碼以類(lèi)BSD許可證的形式開(kāi)源出來(lái)供全球使用。
Nginx因具有高并發(fā)(特別是靜態(tài)資源)、占用系統(tǒng)資源少等特性,且功能豐富而逐漸流行起來(lái)。
在功能應(yīng)用發(fā)面,Nginx不但是一個(gè)優(yōu)秀的Web服務(wù)軟件,還具有反向代理負(fù)載均衡功能和緩存服務(wù)功能。在反向代理負(fù)載均衡功能方面,它類(lèi)似于大名鼎鼎的LVS負(fù)載均衡及Haproxy等專(zhuān)業(yè)代理軟件,但是Nginx部署起來(lái)更為簡(jiǎn)單、方便;在緩存服務(wù)功能方面,它又類(lèi)似于Squid等專(zhuān)業(yè)的緩存服務(wù)軟件。
Nginx 的官方介紹見(jiàn) http://nginx.org/en
HTTP服務(wù)器的特色及優(yōu)點(diǎn):
支持高并發(fā):能支持幾萬(wàn)并發(fā)連接(特別是靜態(tài)小文件業(yè)務(wù)環(huán)境)
資源消耗少:在3萬(wàn)并發(fā)連接下,開(kāi)啟10個(gè)Nginx線程消耗的內(nèi)存不到200MB
可以做HTTP反向代理及加速緩存、即負(fù)載均衡功能,內(nèi)置對(duì)RS節(jié)點(diǎn)服務(wù)器健康檢查功能這相當(dāng)于專(zhuān)業(yè)的Haproxy軟件或LVS的功能。
具備Squid等專(zhuān)業(yè)緩存軟件等的緩存功能。
支持異步網(wǎng)絡(luò)I/O事件橫型epoll(Linux2.6+)
nginx的安裝nginx的安裝可參考上一篇博文,這里不再啰嗦了。介紹幾個(gè)nginx管理的命令吧。
啟動(dòng)
$ /usr/local/nginx/sbin/nginx
重新加載
$ /usr/local/nginx/sbin/nginx -s reload
檢查語(yǔ)法
$ /usr/local/nginx/sbin/nginx -t
殺死進(jìn)程
$ pkill nginx 或者 $ killall nginx # 如果現(xiàn)實(shí)沒(méi)有killall命令,執(zhí)行:yum install -y psmiscnginx配置文件詳解
nginx.conf配置文件全局結(jié)構(gòu)大致如下:
全局配置(user,worker_process,error_log,pid)
events(網(wǎng)絡(luò)連接部分,worker_connections)
http(最重要的部分,大部分功能都在這里)
server(虛擬主機(jī)相關(guān),在http塊里)
location(server里面)
全局配置部分user nobody; # 定義運(yùn)行nginx服務(wù)的用戶,還可以加上組,如 user nobody nobody; worker_processes 1; # 定義nginx子進(jìn)程數(shù)量,即提供服務(wù)的進(jìn)程數(shù)量,該數(shù)值建議和服務(wù)cpu核數(shù)保持一致。 # 除了可以定義數(shù)字外,還可以定義為auto,表示讓系統(tǒng)自動(dòng)調(diào)整。 error_log logs/error.log; # 定義錯(cuò)誤日志的路徑,可以是相對(duì)路徑(相對(duì)prefix路徑的),也可以是絕對(duì)路徑。 # 該配置可以在此處定義,也可以定義到http、server、location里。 error_log logs/error.log notice; # 定義錯(cuò)誤日志路徑以及日志級(jí)別. # 錯(cuò)誤日志級(jí)別:常見(jiàn)的錯(cuò)誤日志級(jí)別有[debug|info|notice|warn|error|crit|alert|emerg],級(jí)別越高記錄的信息越少。 # 如果不定義默認(rèn)是error pid logs/nginx.pid; # 定義nginx進(jìn)程pid文件所在路徑,可以是相對(duì)路徑,也可以是絕對(duì)路徑。 worker_rlimit_nofile 100000; # 定義nginx最多打開(kāi)文件數(shù)限制。如果沒(méi)設(shè)置的話,這個(gè)值為操作系統(tǒng)(ulimit -n)的限制保持一致。 # 把這個(gè)值設(shè)高,nginx就不會(huì)有“too many open files”問(wèn)題了。events配置部分
worker_connections 1024;
定義每個(gè)work_process同時(shí)開(kāi)啟的最大連接數(shù),即允許最多只能有這么多連接。
accept_mutex on;
當(dāng)某一個(gè)時(shí)刻只有一個(gè)網(wǎng)絡(luò)連接請(qǐng)求服務(wù)器時(shí),服務(wù)器上有多個(gè)睡眠的進(jìn)程會(huì)被同時(shí)叫醒,這樣會(huì)損耗一定的服務(wù)器性能。Nginx中的accept_mutex設(shè)置為on,將會(huì)對(duì)多個(gè)Nginx進(jìn)程(worker processer)接收連接時(shí)進(jìn)行序列化,防止多個(gè)進(jìn)程爭(zhēng)搶資源。 默認(rèn)就是on。
multi_accept on;
nginx worker processer可以做到同時(shí)接收多個(gè)新到達(dá)的網(wǎng)絡(luò)連接,前提是把該參數(shù)設(shè)置為on。
默認(rèn)為off,即每個(gè)worker process一次只能接收一個(gè)新到達(dá)的網(wǎng)絡(luò)連接。
use epoll;
Nginx服務(wù)器提供了多個(gè)事件驅(qū)動(dòng)器模型來(lái)處理網(wǎng)絡(luò)消息。
其支持的類(lèi)型有:select、poll、kqueue、epoll、rtsing、/dev/poll以及eventport。
select:只能在Windows下使用,這個(gè)事件模型不建議在高負(fù)載的系統(tǒng)使用
poll:Nginx默認(rèn)首選,但不是在所有系統(tǒng)下都可用
kqueue:這種方式在FreeBSD 4.1+, OpenBSD2.9+, NetBSD 2.0, 和 MacOS X系統(tǒng)中是最高效的
epoll: 這種方式是在Linux 2.6+內(nèi)核中最高效的方式
rtsig:實(shí)時(shí)信號(hào),可用在Linux 2.2.19的內(nèi)核中,但不適用在高流量的系統(tǒng)中
/dev/poll: Solaris 7 11/99+,HP/UX 11.22+, IRIX 6.5.15+, and Tru64
UNIX 5.1A+操作系統(tǒng)最高效的方式
eventport: Solaris 10最高效的方式
http配置部分官方文檔 http://nginx.org/en/docs/
參考鏈接: https://segmentfault.com/a/11...
參考鏈接: https://segmentfault.com/a/11...
參考鏈接:http的header https://kb.cnblogs.com/page/9...
常見(jiàn)配置:
include mime.types; //cat conf/mime.types
定義nginx能識(shí)別的網(wǎng)絡(luò)資源媒體類(lèi)型(如,文本、html、js、css、流媒體等)
default_type application/octet-stream;
定義默認(rèn)的type,如果不定義改行,默認(rèn)為text/plain.
log_format main "$remote_addr - $remote_user [$time_local] "$request" " "$status $body_bytes_sent "$http_referer" " ""$http_user_agent" "$http_x_forwarded_for"";
定義nginx日志格式,其中main為日志格式的名字,后面的為nginx的內(nèi)部變量組成的一串字符串。
access_log logs/access.log main;
定義日志的路徑以及采用的日志格式,該參數(shù)可以在server配置塊中定義。
sendfile on;
是否調(diào)用sendfile函數(shù)傳輸文件,默認(rèn)為off,使用sendfile函數(shù)傳輸,可以減少u(mài)ser mode和kernel mode的切換,從而提升服務(wù)器性能。對(duì)于普通應(yīng)用設(shè)為 on,如果用來(lái)進(jìn)行下載等應(yīng)用磁盤(pán)IO重負(fù)載應(yīng)用,可設(shè)置為off,以平衡磁盤(pán)與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的負(fù)載。
sendfile_max_chunk 128k;
該參數(shù)限定Nginx worker process每次調(diào)用sendfile()函數(shù)傳輸數(shù)據(jù)的最大值,默認(rèn)值為0,如果設(shè)置為0則無(wú)限制。
tcp_nopush on;
當(dāng)tcp_nopush設(shè)置為on時(shí),會(huì)調(diào)用tcp_cork方法進(jìn)行數(shù)據(jù)傳輸。
使用該方法會(huì)產(chǎn)生這樣的效果:當(dāng)應(yīng)用程序產(chǎn)生數(shù)據(jù)時(shí),內(nèi)核不會(huì)立馬封裝包,而是當(dāng)數(shù)據(jù)量積累到一定量時(shí)才會(huì)封裝,然后傳輸。這樣有助于解決網(wǎng)絡(luò)堵塞問(wèn)題。默認(rèn)值為on。舉例:快遞員收快遞、發(fā)快遞,包裹累積到一定量才會(huì)發(fā),節(jié)省運(yùn)輸成本。
keepalive_timeout 65 60;
該參數(shù)有兩個(gè)值,第一個(gè)值設(shè)置nginx服務(wù)器與客戶端會(huì)話結(jié)束后仍舊保持連接的最長(zhǎng)時(shí)間,單位是秒,默認(rèn)為75s。
第二個(gè)值可以省略,它是針對(duì)客戶端的瀏覽器來(lái)設(shè)置的,可以通過(guò)curl -I看到header信息中有一項(xiàng)Keep-Alive: timeout=60,如果不設(shè)置就沒(méi)有這一項(xiàng)。
第二個(gè)數(shù)值設(shè)置后,瀏覽器就會(huì)根據(jù)這個(gè)數(shù)值決定何時(shí)主動(dòng)關(guān)閉連接,Nginx服務(wù)器就不操心了。但有的瀏覽器并不認(rèn)可該參數(shù)。
send_timeout
這個(gè)超時(shí)時(shí)間是發(fā)送響應(yīng)的超時(shí)時(shí)間,即Nginx服務(wù)器向客戶端發(fā)送了數(shù)據(jù)包,但客戶端一直沒(méi)有去接收這個(gè)數(shù)據(jù)包。
如果某個(gè)連接超過(guò)send_timeout定義的超時(shí)時(shí)間,那么Nginx將會(huì)關(guān)閉這個(gè)連接。
client_max_body_size 10m;
瀏覽器在發(fā)送含有較大HTTP包體的請(qǐng)求時(shí),其頭部會(huì)有一個(gè)Content-Length字段,client_max_body_size是用來(lái)限制Content-Length所示值的大小的。
這個(gè)限制包體的配置不用等Nginx接收完所有的HTTP包體,就可以告訴用戶請(qǐng)求過(guò)大不被接受。會(huì)返回413狀態(tài)碼。
例如,用戶試圖上傳一個(gè)1GB的文件,Nginx在收完包頭后,發(fā)現(xiàn)Content-Length超過(guò)client_max_body_size定義的值,
就直接發(fā)送413(Request Entity Too Large)響應(yīng)給客戶端。
gzip on;
是否開(kāi)啟gzip壓縮。
gzip_min_length 1k;
設(shè)置允許壓縮的頁(yè)面最小字節(jié)數(shù),頁(yè)面字節(jié)數(shù)從header頭得content-length中進(jìn)行獲取。默認(rèn)值是20。建議設(shè)置成大于1k的字節(jié)數(shù),小于1k可能會(huì)越壓越大。
gzip_buffers 4 16k;
設(shè)置系統(tǒng)獲取幾個(gè)單位的buffer用于存儲(chǔ)gzip的壓縮結(jié)果數(shù)據(jù)流。4 16k代表分配4個(gè)16k的buffer。
gzip_http_version 1.1;
用于識(shí)別 http 協(xié)議的版本,早期的瀏覽器不支持 Gzip 壓縮,用戶會(huì)看到亂碼,所以為了支持前期版本加上了這個(gè)選項(xiàng)。
如果你用了Nginx反向代理并期望也啟用Gzip壓縮的話,由于末端通信是http/1.1,故請(qǐng)?jiān)O(shè)置為 1.1。
gzip_comp_level 6;
gzip壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度最慢(傳輸快但比較消耗cpu)
gzip_types mime-type ... ;
匹配mime類(lèi)型進(jìn)行壓縮,無(wú)論是否指定,”text/html”類(lèi)型總是會(huì)被壓縮的。在conf/mime.conf里查看對(duì)應(yīng)的type。
示例:gzip_types text/plain application/x-javascript text/css text/html application/xml;
gzip_vary on;
和http頭有關(guān)系,會(huì)在響應(yīng)頭加個(gè) Vary: Accept-Encoding ,可以讓前端的緩存服務(wù)器緩存經(jīng)過(guò)gzip壓縮的頁(yè)面,例如,用Squid緩存經(jīng)過(guò)Nginx壓縮的數(shù)據(jù)。
gzip_proxied any;
Nginx作為反向代理的時(shí)候啟用,決定開(kāi)啟或者關(guān)閉后端服務(wù)器返回的結(jié)果是否壓縮,匹配的前提是后端服務(wù)器必須要返回包含”Via”的 header頭。
以下為可用的值:
off - 關(guān)閉所有的代理結(jié)果數(shù)據(jù)的壓縮
expired - 啟用壓縮,如果header頭中包含 "Expires" 頭信息
no-cache - 啟用壓縮,如果header頭中包含 "Cache-Control:no-cache" 頭信息
no-store - 啟用壓縮,如果header頭中包含 "Cache-Control:no-store" 頭信息
private - 啟用壓縮,如果header頭中包含 "Cache-Control:private" 頭信息
no_last_modified - 啟用壓縮,如果header頭中不包含 "Last-Modified" 頭信息
no_etag - 啟用壓縮 ,如果header頭中不包含 "ETag" 頭信息
auth - 啟用壓縮 , 如果header頭中包含 "Authorization" 頭信息
any - 無(wú)條件啟用壓縮
nginx服務(wù)優(yōu)化 虛擬主機(jī)1、虛擬主機(jī)概念
虛擬主機(jī)指的是,在web服務(wù)里是一個(gè)獨(dú)立的網(wǎng)站站點(diǎn),這個(gè)站點(diǎn)對(duì)應(yīng)獨(dú)立的域名,也可能是IP或端口,具有獨(dú)立的程序及資源目錄,可以獨(dú)立地對(duì)外提供服務(wù)供用戶訪問(wèn)。Nginx軟件是使用一個(gè)server{}標(biāo)簽來(lái)標(biāo)識(shí)一個(gè)虛擬主機(jī)的。一個(gè)web服務(wù)里可以有多個(gè)虛擬主機(jī)標(biāo)簽對(duì),即可同時(shí)支持多個(gè)虛擬主機(jī)站點(diǎn)。
2、虛擬主機(jī)類(lèi)型
常見(jiàn)的虛擬主機(jī)類(lèi)型分三種
基于域名的虛擬主機(jī)
基于端口的虛擬主機(jī)
基于IP的虛擬主機(jī)
基于域名的虛擬主機(jī)是通過(guò)不同域名區(qū)分不同的虛擬主機(jī),是企業(yè)應(yīng)用最廣泛的虛擬主機(jī)類(lèi)型。
基于端口的虛擬主機(jī)是通過(guò)不同端口區(qū)分不同的虛擬主機(jī),常用于公司內(nèi)部的網(wǎng)站,比如不希望用戶訪問(wèn)的網(wǎng)站后臺(tái)等。
基于IP地址的虛擬主機(jī)是通過(guò)不同IP地址區(qū)分不同的虛擬主機(jī),不常用很少見(jiàn)。
3、基于域名的虛擬主機(jī)配置
第一、編輯nginx配置文件nginx.conf,找到http{}塊,在http{}塊里面添加server{}標(biāo)簽,一個(gè)server{}代表一個(gè)虛擬主機(jī)。默認(rèn)nginx.conf中有一個(gè)server{},這里修改一下,并配置兩個(gè)基于域名的虛擬主機(jī)。
配置內(nèi)容如下:
server { listen 80; server_name www.syushin.com; location / { root html/com; index index.html index.htm; } } server { listen 80; server_name www.syushin.org; location / { root html/org; index index.html index.htm; } }
可以看到基于域名的虛擬是在server_name中定義。
第二、創(chuàng)建域名對(duì)應(yīng)的站點(diǎn)目錄及文件。
$ mkdir ../html/com ../html/org $ echo "I am syushin.com" >> ../html/com/index.html $ echo "I am syushin.org" >> ../html/org/index.html
第三、配置域名解析
linux下
echo "192.168.30.7 www.syushin.com www.syushin.org" >> /etc/hosts
windows下
找到域名解析文件,通常在C:WindowsSystem32driversetchosts
添加內(nèi)容:192.168.30.7 www.syushin.com www.syushin.org
第四、檢查nginx語(yǔ)法,重新加載
$ /usr/local/nginx/sbin/nginx -t $ /usr/local/nginx/sbin/nginx -s reload
第五、測(cè)試
linux下用curl命令測(cè)試
[root@lnmp conf]$ curl www.syushin.com I am syushin.com [root@lnmp conf]$ curl www.syushin.org I am syushin.org
windows下用瀏覽器訪問(wèn)
這樣就可以實(shí)現(xiàn)基于域名的虛擬主機(jī)了,用戶輸入不同的域名,訪問(wèn)不同的站點(diǎn)內(nèi)容。而基于端口的虛擬主機(jī)是在server{}標(biāo)簽里的listen處修改監(jiān)聽(tīng)的端口,比如listen 8080;或者listen 8090;
基于IP地址也是在listen里修改,格式如下:192.168.30.7:80;或者192.168.30.8:81
都很簡(jiǎn)單,就不再實(shí)際操作了。
nginx主配置文件是nginx.conf,可以將主配置文件包含所有虛擬主機(jī)的子配置文件統(tǒng)一放入extra目錄里。
使用include參數(shù)實(shí)現(xiàn),它可以放在nginx配置文件的任何地方,用法示例如下:
$ include extra/web01.conf
下面是我的使用方案:
$ vim nginx.conf在http{}刪除默認(rèn)的server{}標(biāo)簽,使用include extra/*.conf;
http { include mime.types; default_type application/octet-stream; ...(這里省略) include extra/*.conf; #就是這一行 }
創(chuàng)建虛擬主機(jī)配置保存的目錄
$ mkdir /usr/local/nginx/conf/extra
進(jìn)入extra目錄,創(chuàng)建虛擬主機(jī)配置文件。
$ vim web01.conf # 內(nèi)容如下 server { listen 80; server_name localhost; index index.html index.htm ; root html; }
這樣通過(guò)主配置文件加上include包含的配置使得Nginx配置更加簡(jiǎn)單,清晰,規(guī)范。
域名重定向在一個(gè)虛擬主機(jī)上有多個(gè)域名的時(shí)候,可以針對(duì)這多個(gè)域名做域名重定向。即訪問(wèn)A域名,瀏覽器會(huì)跳轉(zhuǎn)到B域名。
server { listen 80; server_name www.syushin.com blog.syushin.cc; if ($host = "blog.syushin.cc" ) { rewrite /(.*) http://syushin.com/$1 permanent; } index index.html index.htm index.php; root html/web01; }
虛擬主機(jī)配置如上:其中if語(yǔ)句就是域名重定向的配置了。$host變量就是域名,當(dāng)訪問(wèn)域名是blog.syushin.cc的時(shí)候,就將域名跳轉(zhuǎn)到www.syushin.com。
測(cè)試:
[root@lnmp ~]$ curl -x127.0.0.1:80 www.syushin.com -I HTTP/1.1 200 OK # 正常訪問(wèn)狀態(tài)碼200 Server: nginx/1.14.2 Date: Sun, 10 Mar 2019 13:00:16 GMT Content-Type: text/html Content-Length: 12 Last-Modified: Sun, 10 Mar 2019 12:38:09 GMT Connection: keep-alive ETag: "5c850531-c" Accept-Ranges: bytes [root@lnmp ~]$ curl -x127.0.0.1:80 blog.syushin.cc -I HTTP/1.1 301 Moved Permanently # 狀態(tài)碼301 Server: nginx/1.14.2 Date: Sun, 10 Mar 2019 13:00:25 GMT Content-Type: text/html Content-Length: 185 Connection: keep-alive Location: http://www.syushin.com/ # 重定向域名用戶認(rèn)證 nginx訪問(wèn)日志
nginx訪問(wèn)日志就是用戶訪問(wèn)網(wǎng)站的記錄。可以針對(duì)不同格式記錄日志。
配置nginx訪問(wèn)日志格式(這里只使用其中一部分):
# 在nginx主配置文件中的http{}塊里定義 log_format main "$remote_addr $http_x_forwarded_for [$time_local]" " $host "$request_uri" $status" " "$http_referer" "$http_user_agent"";
參數(shù)說(shuō)明:
變量 | 描述 |
---|---|
$remote_addr | 客戶端IP(公網(wǎng)IP) |
$http_x_forwarded_for | 代理服務(wù)器的IP |
$time_local | 服務(wù)器本地時(shí)間 |
$host | 訪問(wèn)主機(jī)名(域名) |
$request_url | 訪問(wèn)的url地址 |
$status | 狀態(tài)碼 |
$http_referer | referer |
$http_user_agent | user_agent |
虛擬主機(jī)配置文件爬配置nginx訪問(wèn)日志保存目錄以及使用主配置文件里的日志格式:
server { listen 80; server_name www.syushin.com blog.syushin.cc; if ($host = "blog.syushin.cc" ) { rewrite /(.*) http://www.syushin.com/$1 permanent; } index index.html index.htm index.php; root html/web01; location ~ .php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; } access_log /var/log/nginx/syushin_access.log main; # 這一行就是配置訪問(wèn)日志 }
創(chuàng)建日志文件目錄
$ mkdir -p /var/log/nginx
檢查語(yǔ)法、重新加載
[root@lnmp conf]$ $ /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@lnmp conf]$ /usr/local/nginx/sbin/nginx -s reload
測(cè)試,瀏覽器訪問(wèn)一次域名和在本地curl一下,查看是否有日志生成。
[root@lnmp nginx]$ curl -x127.0.0.1:80 blog.syushin.cc301 Moved Permanently 301 Moved Permanently
nginx/1.14.2 [root@lnmp nginx]$ cat syushin_access.log 192.168.30.1 - [11/Mar/2019:12:55:01 +0800] www.syushin.com "/" 304 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" 127.0.0.1 - [11/Mar/2019:12:56:32 +0800] blog.syushin.cc "/" 301 "-" "curl/7.29.0"
這樣配置訪問(wèn)日志就成功了。
日志切割生產(chǎn)環(huán)境下,訪問(wèn)日志的量是很大的,如果把訪問(wèn)日志都放在一個(gè)文件里是會(huì)有很大影響的。因此將nginx訪問(wèn)日志進(jìn)行切割是很有必要的。
如何切割日志?Linux有個(gè)日志切割工具logrotate。它的配置文件在/etc/logrotate.conf
查看配置文件
# see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file dateext # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp and btmp -- we"ll rotate them here /var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 }
其中weekly表示按周切割;
rotate 4表示一次存儲(chǔ)4個(gè)歸檔文件,對(duì)于第5個(gè)歸檔文件,時(shí)間最久的文檔會(huì)被覆蓋;
create以指定的權(quán)限創(chuàng)建全新的日志文件,同時(shí)logrotate也會(huì)重命名原始日志文件。
dataext表示以日期為格式命令新的日志文件
/var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 }
上面代碼塊表示針對(duì)/var/log/wtmp這個(gè)目錄下做日志切割,時(shí)間為一個(gè)月,只對(duì)文件大小大于1M文件進(jìn)行切割。
對(duì)于nginx的日志切割
如果是yum安裝的nginx,logrotate已經(jīng)有默認(rèn)的切割策略了/etc/logrotate.d/nginx。
而編譯安裝的nginx就沒(méi)有,需要手動(dòng)定義,也可以用這個(gè)日志配置
$ cat /etc/logrotate.d/nginx /var/log/nginx/*.log { daily rotate 5 missingok notifempty create 644 www www postrotate if [ -f /application/nginx/logs/nginx.pid ]; then kill -USR1 `cat /application/nginx/logs/nginx.pid` fi endscript }
logrotate工具對(duì)于防止因龐大的日志文件而耗盡存儲(chǔ)空間是十分有用的。配置完畢后,進(jìn)程是全自動(dòng)的,可以長(zhǎng)時(shí)間在不需要人為干預(yù)下運(yùn)行。除了樣例之外,自己還可以定制不同的樣式滿足需求。
訪問(wèn)日志不記錄靜態(tài)文件在訪問(wèn)日志里,過(guò)濾掉一些圖片、js、css等的請(qǐng)求日志。因?yàn)檫@樣的日志沒(méi)有多大意義,而且會(huì)占用很大的磁盤(pán)空間。
配置,編輯虛擬主機(jī)配置文件,添加location:
location ~* .(png|jpeg|jpg|gif|js|css|bmp)$ { access_log off; }
上面規(guī)則表示凡是匹配到以.png|jpeg|jpg|gif|js|css|bmp結(jié)尾的文件,訪問(wèn)日志功能就關(guān)閉,即不記錄訪問(wèn)靜態(tài)文件的訪問(wèn)記錄。*號(hào)表示不區(qū)分大小寫(xiě),.號(hào)前面需要只用轉(zhuǎn)義字符,|表示或者。
測(cè)試
在虛擬主機(jī)站點(diǎn)目錄里添加資源文件test.png,然后curl訪問(wèn)一下、再查看日志是否有記錄這條訪問(wèn)記錄,如果沒(méi)有則表示配置成功。
清空日志
$ > /var/log/nginx/syushin_access.log
創(chuàng)建以png結(jié)尾的文件
$ touch /usr/local/nginx/html/web01/test.png
訪問(wèn)
# 成功訪問(wèn) [root@lnmp web01]$ curl -x127.0.0.1:80 www.syushin.com/test.png -I HTTP/1.1 200 OK Server: nginx/1.14.2 Date: Mon, 11 Mar 2019 05:19:58 GMT Content-Type: image/png Content-Length: 0 Last-Modified: Mon, 11 Mar 2019 05:16:14 GMT Connection: keep-alive ETag: "5c85ef1e-0" Accept-Ranges: bytes
查看日志
[root@lnmp web01]# cat /var/log/nginx/syushin_access.log [root@lnmp web01]#
無(wú)日志記錄,說(shuō)明配置成功。
防盜鏈盜鏈?zhǔn)侵阜?wù)提供商自己不提供服務(wù)的內(nèi)容,通過(guò)技術(shù)手段繞過(guò)其它有利益的最終用戶界面(如廣告),直接在自己的網(wǎng)站上向最終用戶提供其它服務(wù)提供商的服務(wù)內(nèi)容,騙取最終用戶的瀏覽和點(diǎn)擊率。受益者不提供資源或提供很少的資源,而真正的服務(wù)提供商卻得不到任何的收益。
防盜鏈就是防止上面情況的。常見(jiàn)的盜鏈?zhǔn)菆D片盜鏈,音頻盜鏈,文件盜鏈。
Referer 防盜鏈
Referer在HTTP協(xié)議里有特殊的用途,當(dāng)瀏覽器向服務(wù)器發(fā)送請(qǐng)求時(shí),一般會(huì)帶上
Referer頭,告知服務(wù)器該請(qǐng)求是從哪個(gè)頁(yè)面鏈接過(guò)來(lái)的。Referer經(jīng)常被用于頁(yè)面訪問(wèn)統(tǒng)計(jì)、圖片防盜鏈等。
配置圖片防盜鏈
location ~ .(png|gif|jpeg|bmp|mp3|mp4|flv)$ { valid_referers none blocked server_name *.syushin.com; if ($invalid_referer){ return 403; } }
valid referers指的是白名單內(nèi)的域名可以引用站點(diǎn)圖片
none表示空referer,即直接打開(kāi)站點(diǎn)的圖片,而不是從其他網(wǎng)站打開(kāi)本站點(diǎn)的圖片文件,因此對(duì)直接訪問(wèn)站點(diǎn)內(nèi)容的不做限制。
blocked指的是非法鏈接
server_name就是虛擬主機(jī)域名
后面的*.syushin.com就是白名單域名
這樣配置后,當(dāng)從其他網(wǎng)站引用本站的圖片的時(shí)候,就引用不了了。
測(cè)試:使用curl -e選項(xiàng)測(cè)試,-e指定referer
$ curl -I -e "http://www.aaa.com/1.txt" http://www.syushin.com/test.png
出現(xiàn)403說(shuō)明配置成功
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/40373.html
摘要:?jiǎn)?dòng)服務(wù)啟動(dòng)查看端口進(jìn)程進(jìn)入數(shù)據(jù)庫(kù)設(shè)置軟連接設(shè)置密碼用戶登錄至此安裝完畢。編譯安裝下載軟件包解壓編譯安裝添加啟動(dòng)腳本內(nèi)容如下設(shè)置開(kāi)機(jī)啟動(dòng)啟動(dòng),查看進(jìn)程端口確定至此安裝完畢。 前言 系統(tǒng)環(huán)境 [root@lnmp mysql]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [root@lnmp mysql]...
摘要:寶塔面板優(yōu)惠券永久授權(quán)版多少錢(qián)寶塔面板讓運(yùn)維簡(jiǎn)單高效。目前,很多站長(zhǎng)及企業(yè)可能會(huì)購(gòu)買(mǎi)寶塔面板專(zhuān)業(yè)版或企業(yè)版,寶塔面板專(zhuān)業(yè)版僅元寶塔面板專(zhuān)業(yè)版僅元寶塔面板企業(yè)版僅元年寶塔面板企業(yè)版僅元年起。如寶塔數(shù)據(jù)同步工具主從復(fù)制。寶塔面板優(yōu)惠券永久授權(quán)版多少錢(qián)?寶塔面板讓運(yùn)維簡(jiǎn)單高效。面板支持Linux與Windows系統(tǒng)。一鍵配置:LAMP/LNMP、網(wǎng)站、數(shù)據(jù)庫(kù)、FTP、SSL,通過(guò)Web端輕松管理云...
摘要:熟練使用等抓包工具底層大神級(jí),內(nèi)核其它素養(yǎng)處理方式除了技能,我覺(jué)得素養(yǎng)態(tài)度也可以談?wù)劙踩\(yùn)維人員的權(quán)限很大,所以一定要保證帳號(hào)私鑰的安全。應(yīng)該第一時(shí)間和開(kāi)發(fā)部門(mén)確認(rèn),要求優(yōu)化代碼。進(jìn)取心不斷學(xué)習(xí)運(yùn)維的知識(shí)范圍很廣,要不斷學(xué)習(xí)。 寫(xiě)代碼寫(xiě)了10多年, 從小公司到大公司, 前端, 后端, 數(shù)據(jù)庫(kù), 運(yùn)維什么都做, 最后還是專(zhuān)職做運(yùn)維了. 整理下運(yùn)維的一些技能, 部分是網(wǎng)上資料并整理. Li...
閱讀 540·2021-08-31 09:45
閱讀 1647·2021-08-11 11:19
閱讀 883·2019-08-30 15:55
閱讀 821·2019-08-30 10:52
閱讀 2845·2019-08-29 13:11
閱讀 2924·2019-08-23 17:08
閱讀 2832·2019-08-23 15:11
閱讀 3066·2019-08-23 14:33