摘要:作為反向代理的時候啟用,決定開啟或者關(guān)閉后端服務(wù)器返回的結(jié)果是否壓縮,匹配的前提是后端服務(wù)器必須要返回包含的頭。
軟件介紹
與 Apache軟件類似, Nginx ( “engme x")是一個開源的,支持高性能、高并發(fā)的 WWW服務(wù)器和代理服務(wù)軟件。它是由俄羅斯人 Igor Sysoev開發(fā)的,最初被應(yīng)用在勘羅斯的大型網(wǎng)站 www.rambler.ru 上,后來作者將源代碼以類BSD許可證的形式開源出來供全球使用。
Nginx因具有高并發(fā)(特別是靜態(tài)資源)、占用系統(tǒng)資源少等特性,且功能豐富而逐漸流行起來。
在功能應(yīng)用發(fā)面,Nginx不但是一個優(yōu)秀的Web服務(wù)軟件,還具有反向代理負(fù)載均衡功能和緩存服務(wù)功能。在反向代理負(fù)載均衡功能方面,它類似于大名鼎鼎的LVS負(fù)載均衡及Haproxy等專業(yè)代理軟件,但是Nginx部署起來更為簡單、方便;在緩存服務(wù)功能方面,它又類似于Squid等專業(yè)的緩存服務(wù)軟件。
Nginx 的官方介紹見 http://nginx.org/en
HTTP服務(wù)器的特色及優(yōu)點(diǎn):
支持高并發(fā):能支持幾萬并發(fā)連接(特別是靜態(tài)小文件業(yè)務(wù)環(huán)境)
資源消耗少:在3萬并發(fā)連接下,開啟10個Nginx線程消耗的內(nèi)存不到200MB
可以做HTTP反向代理及加速緩存、即負(fù)載均衡功能,內(nèi)置對RS節(jié)點(diǎn)服務(wù)器健康檢查功能這相當(dāng)于專業(yè)的Haproxy軟件或LVS的功能。
具備Squid等專業(yè)緩存軟件等的緩存功能。
支持異步網(wǎng)絡(luò)I/O事件橫型epoll(Linux2.6+)
nginx的安裝nginx的安裝可參考上一篇博文,這里不再啰嗦了。介紹幾個nginx管理的命令吧。
啟動
$ /usr/local/nginx/sbin/nginx
重新加載
$ /usr/local/nginx/sbin/nginx -s reload
檢查語法
$ /usr/local/nginx/sbin/nginx -t
殺死進(jìn)程
$ pkill nginx 或者 $ killall nginx # 如果現(xiàn)實(shí)沒有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)自動調(diào)整。 error_log logs/error.log; # 定義錯誤日志的路徑,可以是相對路徑(相對prefix路徑的),也可以是絕對路徑。 # 該配置可以在此處定義,也可以定義到http、server、location里。 error_log logs/error.log notice; # 定義錯誤日志路徑以及日志級別. # 錯誤日志級別:常見的錯誤日志級別有[debug|info|notice|warn|error|crit|alert|emerg],級別越高記錄的信息越少。 # 如果不定義默認(rèn)是error pid logs/nginx.pid; # 定義nginx進(jìn)程pid文件所在路徑,可以是相對路徑,也可以是絕對路徑。 worker_rlimit_nofile 100000; # 定義nginx最多打開文件數(shù)限制。如果沒設(shè)置的話,這個值為操作系統(tǒng)(ulimit -n)的限制保持一致。 # 把這個值設(shè)高,nginx就不會有“too many open files”問題了。events配置部分
worker_connections 1024;
定義每個work_process同時開啟的最大連接數(shù),即允許最多只能有這么多連接。
accept_mutex on;
當(dāng)某一個時刻只有一個網(wǎng)絡(luò)連接請求服務(wù)器時,服務(wù)器上有多個睡眠的進(jìn)程會被同時叫醒,這樣會損耗一定的服務(wù)器性能。Nginx中的accept_mutex設(shè)置為on,將會對多個Nginx進(jìn)程(worker processer)接收連接時進(jìn)行序列化,防止多個進(jìn)程爭搶資源。 默認(rèn)就是on。
multi_accept on;
nginx worker processer可以做到同時接收多個新到達(dá)的網(wǎng)絡(luò)連接,前提是把該參數(shù)設(shè)置為on。
默認(rèn)為off,即每個worker process一次只能接收一個新到達(dá)的網(wǎng)絡(luò)連接。
use epoll;
Nginx服務(wù)器提供了多個事件驅(qū)動器模型來處理網(wǎng)絡(luò)消息。
其支持的類型有:select、poll、kqueue、epoll、rtsing、/dev/poll以及eventport。
select:只能在Windows下使用,這個事件模型不建議在高負(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í)時信號,可用在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...
常見配置:
include mime.types; //cat conf/mime.types
定義nginx能識別的網(wǎng)絡(luò)資源媒體類型(如,文本、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ù)傳輸,可以減少user mode和kernel mode的切換,從而提升服務(wù)器性能。對于普通應(yīng)用設(shè)為 on,如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為off,以平衡磁盤與網(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則無限制。
tcp_nopush on;
當(dāng)tcp_nopush設(shè)置為on時,會調(diào)用tcp_cork方法進(jìn)行數(shù)據(jù)傳輸。
使用該方法會產(chǎn)生這樣的效果:當(dāng)應(yīng)用程序產(chǎn)生數(shù)據(jù)時,內(nèi)核不會立馬封裝包,而是當(dāng)數(shù)據(jù)量積累到一定量時才會封裝,然后傳輸。這樣有助于解決網(wǎng)絡(luò)堵塞問題。默認(rèn)值為on。舉例:快遞員收快遞、發(fā)快遞,包裹累積到一定量才會發(fā),節(jié)省運(yùn)輸成本。
keepalive_timeout 65 60;
該參數(shù)有兩個值,第一個值設(shè)置nginx服務(wù)器與客戶端會話結(jié)束后仍舊保持連接的最長時間,單位是秒,默認(rèn)為75s。
第二個值可以省略,它是針對客戶端的瀏覽器來設(shè)置的,可以通過curl -I看到header信息中有一項(xiàng)Keep-Alive: timeout=60,如果不設(shè)置就沒有這一項(xiàng)。
第二個數(shù)值設(shè)置后,瀏覽器就會根據(jù)這個數(shù)值決定何時主動關(guān)閉連接,Nginx服務(wù)器就不操心了。但有的瀏覽器并不認(rèn)可該參數(shù)。
send_timeout
這個超時時間是發(fā)送響應(yīng)的超時時間,即Nginx服務(wù)器向客戶端發(fā)送了數(shù)據(jù)包,但客戶端一直沒有去接收這個數(shù)據(jù)包。
如果某個連接超過send_timeout定義的超時時間,那么Nginx將會關(guān)閉這個連接。
client_max_body_size 10m;
瀏覽器在發(fā)送含有較大HTTP包體的請求時,其頭部會有一個Content-Length字段,client_max_body_size是用來限制Content-Length所示值的大小的。
這個限制包體的配置不用等Nginx接收完所有的HTTP包體,就可以告訴用戶請求過大不被接受。會返回413狀態(tài)碼。
例如,用戶試圖上傳一個1GB的文件,Nginx在收完包頭后,發(fā)現(xiàn)Content-Length超過client_max_body_size定義的值,
就直接發(fā)送413(Request Entity Too Large)響應(yīng)給客戶端。
gzip on;
是否開啟gzip壓縮。
gzip_min_length 1k;
設(shè)置允許壓縮的頁面最小字節(jié)數(shù),頁面字節(jié)數(shù)從header頭得content-length中進(jìn)行獲取。默認(rèn)值是20。建議設(shè)置成大于1k的字節(jié)數(shù),小于1k可能會越壓越大。
gzip_buffers 4 16k;
設(shè)置系統(tǒng)獲取幾個單位的buffer用于存儲gzip的壓縮結(jié)果數(shù)據(jù)流。4 16k代表分配4個16k的buffer。
gzip_http_version 1.1;
用于識別 http 協(xié)議的版本,早期的瀏覽器不支持 Gzip 壓縮,用戶會看到亂碼,所以為了支持前期版本加上了這個選項(xiàng)。
如果你用了Nginx反向代理并期望也啟用Gzip壓縮的話,由于末端通信是http/1.1,故請?jiān)O(shè)置為 1.1。
gzip_comp_level 6;
gzip壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度最慢(傳輸快但比較消耗cpu)
gzip_types mime-type ... ;
匹配mime類型進(jìn)行壓縮,無論是否指定,”text/html”類型總是會被壓縮的。在conf/mime.conf里查看對應(yīng)的type。
示例:gzip_types text/plain application/x-javascript text/css text/html application/xml;
gzip_vary on;
和http頭有關(guān)系,會在響應(yīng)頭加個 Vary: Accept-Encoding ,可以讓前端的緩存服務(wù)器緩存經(jīng)過gzip壓縮的頁面,例如,用Squid緩存經(jīng)過Nginx壓縮的數(shù)據(jù)。
gzip_proxied any;
Nginx作為反向代理的時候啟用,決定開啟或者關(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 - 無條件啟用壓縮
nginx服務(wù)優(yōu)化 虛擬主機(jī)1、虛擬主機(jī)概念
虛擬主機(jī)指的是,在web服務(wù)里是一個獨(dú)立的網(wǎng)站站點(diǎn),這個站點(diǎn)對應(yīng)獨(dú)立的域名,也可能是IP或端口,具有獨(dú)立的程序及資源目錄,可以獨(dú)立地對外提供服務(wù)供用戶訪問。Nginx軟件是使用一個server{}標(biāo)簽來標(biāo)識一個虛擬主機(jī)的。一個web服務(wù)里可以有多個虛擬主機(jī)標(biāo)簽對,即可同時支持多個虛擬主機(jī)站點(diǎn)。
2、虛擬主機(jī)類型
常見的虛擬主機(jī)類型分三種
基于域名的虛擬主機(jī)
基于端口的虛擬主機(jī)
基于IP的虛擬主機(jī)
基于域名的虛擬主機(jī)是通過不同域名區(qū)分不同的虛擬主機(jī),是企業(yè)應(yīng)用最廣泛的虛擬主機(jī)類型。
基于端口的虛擬主機(jī)是通過不同端口區(qū)分不同的虛擬主機(jī),常用于公司內(nèi)部的網(wǎng)站,比如不希望用戶訪問的網(wǎng)站后臺等。
基于IP地址的虛擬主機(jī)是通過不同IP地址區(qū)分不同的虛擬主機(jī),不常用很少見。
3、基于域名的虛擬主機(jī)配置
第一、編輯nginx配置文件nginx.conf,找到http{}塊,在http{}塊里面添加server{}標(biāo)簽,一個server{}代表一個虛擬主機(jī)。默認(rèn)nginx.conf中有一個server{},這里修改一下,并配置兩個基于域名的虛擬主機(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)建域名對應(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語法,重新加載
$ /usr/local/nginx/sbin/nginx -t $ /usr/local/nginx/sbin/nginx -s reload
第五、測試
linux下用curl命令測試
[root@lnmp conf]$ curl www.syushin.com I am syushin.com [root@lnmp conf]$ curl www.syushin.org I am syushin.org
windows下用瀏覽器訪問
這樣就可以實(shí)現(xiàn)基于域名的虛擬主機(jī)了,用戶輸入不同的域名,訪問不同的站點(diǎn)內(nèi)容。而基于端口的虛擬主機(jī)是在server{}標(biāo)簽里的listen處修改監(jiān)聽的端口,比如listen 8080;或者listen 8090;
基于IP地址也是在listen里修改,格式如下:192.168.30.7:80;或者192.168.30.8:81
都很簡單,就不再實(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; }
這樣通過主配置文件加上include包含的配置使得Nginx配置更加簡單,清晰,規(guī)范。
域名重定向在一個虛擬主機(jī)上有多個域名的時候,可以針對這多個域名做域名重定向。即訪問A域名,瀏覽器會跳轉(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語句就是域名重定向的配置了。$host變量就是域名,當(dāng)訪問域名是blog.syushin.cc的時候,就將域名跳轉(zhuǎn)到www.syushin.com。
測試:
[root@lnmp ~]$ curl -x127.0.0.1:80 www.syushin.com -I HTTP/1.1 200 OK # 正常訪問狀態(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訪問日志
nginx訪問日志就是用戶訪問網(wǎng)站的記錄??梢葬槍Σ煌袷接涗浫罩?。
配置nginx訪問日志格式(這里只使用其中一部分):
# 在nginx主配置文件中的http{}塊里定義 log_format main "$remote_addr $http_x_forwarded_for [$time_local]" " $host "$request_uri" $status" " "$http_referer" "$http_user_agent"";
參數(shù)說明:
變量 | 描述 |
---|---|
$remote_addr | 客戶端IP(公網(wǎng)IP) |
$http_x_forwarded_for | 代理服務(wù)器的IP |
$time_local | 服務(wù)器本地時間 |
$host | 訪問主機(jī)名(域名) |
$request_url | 訪問的url地址 |
$status | 狀態(tài)碼 |
$http_referer | referer |
$http_user_agent | user_agent |
虛擬主機(jī)配置文件爬配置nginx訪問日志保存目錄以及使用主配置文件里的日志格式:
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; # 這一行就是配置訪問日志 }
創(chuàng)建日志文件目錄
$ mkdir -p /var/log/nginx
檢查語法、重新加載
[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
測試,瀏覽器訪問一次域名和在本地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"
這樣配置訪問日志就成功了。
日志切割生產(chǎn)環(huán)境下,訪問日志的量是很大的,如果把訪問日志都放在一個文件里是會有很大影響的。因此將nginx訪問日志進(jìn)行切割是很有必要的。
如何切割日志?Linux有個日志切割工具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表示一次存儲4個歸檔文件,對于第5個歸檔文件,時間最久的文檔會被覆蓋;
create以指定的權(quán)限創(chuàng)建全新的日志文件,同時logrotate也會重命名原始日志文件。
dataext表示以日期為格式命令新的日志文件
/var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 }
上面代碼塊表示針對/var/log/wtmp這個目錄下做日志切割,時間為一個月,只對文件大小大于1M文件進(jìn)行切割。
對于nginx的日志切割
如果是yum安裝的nginx,logrotate已經(jīng)有默認(rèn)的切割策略了/etc/logrotate.d/nginx。
而編譯安裝的nginx就沒有,需要手動定義,也可以用這個日志配置
$ 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工具對于防止因龐大的日志文件而耗盡存儲空間是十分有用的。配置完畢后,進(jìn)程是全自動的,可以長時間在不需要人為干預(yù)下運(yùn)行。除了樣例之外,自己還可以定制不同的樣式滿足需求。
訪問日志不記錄靜態(tài)文件在訪問日志里,過濾掉一些圖片、js、css等的請求日志。因?yàn)檫@樣的日志沒有多大意義,而且會占用很大的磁盤空間。
配置,編輯虛擬主機(jī)配置文件,添加location:
location ~* .(png|jpeg|jpg|gif|js|css|bmp)$ { access_log off; }
上面規(guī)則表示凡是匹配到以.png|jpeg|jpg|gif|js|css|bmp結(jié)尾的文件,訪問日志功能就關(guān)閉,即不記錄訪問靜態(tài)文件的訪問記錄。*號表示不區(qū)分大小寫,.號前面需要只用轉(zhuǎn)義字符,|表示或者。
測試
在虛擬主機(jī)站點(diǎn)目錄里添加資源文件test.png,然后curl訪問一下、再查看日志是否有記錄這條訪問記錄,如果沒有則表示配置成功。
清空日志
$ > /var/log/nginx/syushin_access.log
創(chuàng)建以png結(jié)尾的文件
$ touch /usr/local/nginx/html/web01/test.png
訪問
# 成功訪問 [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]#
無日志記錄,說明配置成功。
防盜鏈盜鏈?zhǔn)侵阜?wù)提供商自己不提供服務(wù)的內(nèi)容,通過技術(shù)手段繞過其它有利益的最終用戶界面(如廣告),直接在自己的網(wǎng)站上向最終用戶提供其它服務(wù)提供商的服務(wù)內(nèi)容,騙取最終用戶的瀏覽和點(diǎn)擊率。受益者不提供資源或提供很少的資源,而真正的服務(wù)提供商卻得不到任何的收益。
防盜鏈就是防止上面情況的。常見的盜鏈?zhǔn)菆D片盜鏈,音頻盜鏈,文件盜鏈。
Referer 防盜鏈
Referer在HTTP協(xié)議里有特殊的用途,當(dāng)瀏覽器向服務(wù)器發(fā)送請求時,一般會帶上
Referer頭,告知服務(wù)器該請求是從哪個頁面鏈接過來的。Referer經(jīng)常被用于頁面訪問統(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,即直接打開站點(diǎn)的圖片,而不是從其他網(wǎng)站打開本站點(diǎn)的圖片文件,因此對直接訪問站點(diǎn)內(nèi)容的不做限制。
blocked指的是非法鏈接
server_name就是虛擬主機(jī)域名
后面的*.syushin.com就是白名單域名
這樣配置后,當(dāng)從其他網(wǎng)站引用本站的圖片的時候,就引用不了了。
測試:使用curl -e選項(xiàng)測試,-e指定referer
$ curl -I -e "http://www.aaa.com/1.txt" http://www.syushin.com/test.png
出現(xiàn)403說明配置成功
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40373.html
摘要:啟動服務(wù)啟動查看端口進(jìn)程進(jìn)入數(shù)據(jù)庫設(shè)置軟連接設(shè)置密碼用戶登錄至此安裝完畢。編譯安裝下載軟件包解壓編譯安裝添加啟動腳本內(nèi)容如下設(shè)置開機(jī)啟動啟動,查看進(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)版多少錢寶塔面板讓運(yùn)維簡單高效。目前,很多站長及企業(yè)可能會購買寶塔面板專業(yè)版或企業(yè)版,寶塔面板專業(yè)版僅元寶塔面板專業(yè)版僅元寶塔面板企業(yè)版僅元年寶塔面板企業(yè)版僅元年起。如寶塔數(shù)據(jù)同步工具主從復(fù)制。寶塔面板優(yōu)惠券永久授權(quán)版多少錢?寶塔面板讓運(yùn)維簡單高效。面板支持Linux與Windows系統(tǒng)。一鍵配置:LAMP/LNMP、網(wǎng)站、數(shù)據(jù)庫、FTP、SSL,通過Web端輕松管理云...
摘要:熟練使用等抓包工具底層大神級,內(nèi)核其它素養(yǎng)處理方式除了技能,我覺得素養(yǎng)態(tài)度也可以談?wù)劙踩\(yùn)維人員的權(quán)限很大,所以一定要保證帳號私鑰的安全。應(yīng)該第一時間和開發(fā)部門確認(rèn),要求優(yōu)化代碼。進(jìn)取心不斷學(xué)習(xí)運(yùn)維的知識范圍很廣,要不斷學(xué)習(xí)。 寫代碼寫了10多年, 從小公司到大公司, 前端, 后端, 數(shù)據(jù)庫, 運(yùn)維什么都做, 最后還是專職做運(yùn)維了. 整理下運(yùn)維的一些技能, 部分是網(wǎng)上資料并整理. Li...
閱讀 555·2021-08-31 09:45
閱讀 1666·2021-08-11 11:19
閱讀 898·2019-08-30 15:55
閱讀 836·2019-08-30 10:52
閱讀 2871·2019-08-29 13:11
閱讀 2940·2019-08-23 17:08
閱讀 2851·2019-08-23 15:11
閱讀 3080·2019-08-23 14:33