Nginx最佳化與防盜鏈

chw_throx發表於2022-03-09

Nginx最佳化與防盜鏈


一、隱藏版本號

可以使用 Fiddler 工具抓取資料包,檢視 Nginx版本,也可以在 CentOS 中使用命令 curl -I  http://192.168.239.20 顯示響應報文首部資訊。

curl -I http://192.168.239.20

1.

修改配置檔案方式

vim /usr/local/nginx/conf/nginx.conf

http {

include       mime.types;

default_type  application/octet-stream;

server_tokens off; #新增,關閉版本號

......

}

systemctl restart nginx     #重啟nginx服務


修改使用者與組

user nginx nginx; #取消註釋,修改使用者為 nginx ,組為 nginx

systemctl restart nginx

ps aux | grep nginx

主程式由root建立,子程式由nginx建立

快取時間

server {

location / {

root html;

index index.html index.htm;

location ~ \.(gif|jpg|jepg|png|bmp|ico)$ { #加入新的 location,以圖片作為快取物件

expires 1d; #指定快取時間,1天

11.

12.

13.

14.

15.

16.

17.

18.

在Linux系統中,開啟火狐瀏覽器,右擊點檢視元素

選擇 網路 —> 選擇 HTML、WS、其他

訪問  http://192.168.239.10 ,雙擊200響應訊息檢視響應頭中包含 Cahce-Control:max-age=86400 表示快取時間是 86400 秒。也就是快取一天的時間,一天之內瀏覽器訪問這個頁面,都是用快取中的資料,而不需要向 Nginx 伺服器重新發出請求,減少了伺服器的使用頻寬。

二、日誌切割

vim /fenge.sh

#!/bin/bash

d=$(date -d "-1 day" "+%Y%m%d")                 #顯示前一天的時間

logs_path="/var/log/nginx"

pid_path=`cat /usr/local/nginx/logs/nginx.pid`

[ -d $logs_path ] || mkdir -p $logs_path        #建立日誌檔案目錄

#移動並重新命名日誌檔案

mv /usr/local/nginx/logs/access.log ${logs_path}/kgc.com-access.log-{$d}

#重建日誌檔案

kill -USR1 $pid_path

#刪除30天前的日誌檔案

find $logs_path -mtime +30 -exec rm -rf {} \;

#find $logs_path -mtime +30 |xargs rm -rf

source fenge.sh

ls /var/log/nginx

ls /usr/local/nginx/logs/access.log

crontab -e

0 1 * * * /root/fenge.sh

在linux作業系統中,每個檔案都有很多的時間引數,其中有三個比較主要,分別是ctime,atime,mtime

ctime(status time):

當修改檔案的許可權或者屬性的時候,就會更新這個時間,ctime並不是create time,更像是change time,

只有當更新檔案的屬性或者許可權的時候才會更新這個時間,但是更改內容的話是不會更新這個時間。

atime(accesstime):

當使用這個檔案的時候就會更新這個時間

mtime(modification time):

當修改檔案的內容資料的時候,就會更新這個時間,而更改許可權或者屬性,mtime不會改變,這就是和ctime的區別。

三、連線超時

HTTP有一個KeepAlive模式,它告訴web伺服器在處理完一個請求後保持這個TCP連線的開啟狀態。若接收到來自客戶端的其它請求,服務端會利用這個未被關閉的連線,而不需要再建立一個連線。

KeepAlive 在一段時間內保持開啟狀態,它們會在這段時間內佔用資源。佔用過多就會影響效能。

keepalive_timeout 65 180;

client_header_timeout 80;

client_body_timeout 80;

keepalive_timeout

指定KeepAlive的超時時間(timeout)。指定每個TCP連線最多可以保持多長時間,伺服器將會在這個時間後關閉連線。 Nginx的預設值是65秒,有些瀏覽器最多隻保持 60 秒,所以可以設定為 60 秒。若將它設定為0,就禁止了keepalive 連線。

第二個引數(可選的)指定了在響應頭Keep-Alive:timeout=time中的time值。這個頭能夠讓一些瀏覽器主動關閉連線,這樣伺服器就不必去關閉連線了。沒有這個引數,Nginx 不會傳送 Keep-Alive 響應頭。

client_header_timeout

客戶端向服務端傳送一個完整的 request header 的超時時間。如果客戶端在指定時間內沒有傳送一個完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。

client_body_timeout

指定客戶端與服務端建立連線後傳送 request body 的超時時間。如果客戶端在指定時間內沒有傳送任何內容,Nginx 返回 HTTP 408(Request Timed Out)。

四、更改程式數

cat /proc/cpuinfo | grep -c "physical id" #檢視cpu核數

ps aux | grep nginx #檢視nginx主程式中包含幾個子程式

worker_processes  2; #修改為核數相同或者2倍

worker_cpu_affinity 01 10; #設定每個程式由不同cpu處理,程式數配2 4 6 8分別為0001 0010 0100 1000

五、配置網頁壓縮

gzip on; #取消註釋,開啟gzip壓縮功能

gzip_min_length 1k;      #最小壓縮檔案大小

gzip_buffers 4 16k;      #壓縮緩衝區,大小為4個16k緩衝區

gzip_http_version 1.1;    #壓縮版本(預設1.1,前端如果是squid2.5請使用1.0)

gzip_comp_level 6;        #壓縮比率

gzip_vary on; #支援前端快取伺服器儲存壓縮頁面

gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json; #壓縮型別,表示哪些網頁文件啟用壓縮功能

cd /usr/local/nginx/html

先將game.jpg檔案傳到/usr/local/nginx/html目錄下

vim index.html

<img src="game.jpg"/> #網頁中插入圖片

</body>

</html>

訪問  http://192.168.184.20 ,雙擊200響應訊息檢視響應頭中包含 Content-Encoding: gzip

六、配置防盜鏈

登入後複製

location ~*\.(jpg|gif|swf)$ {

valid_referers *.lic.com lic.com;

if ( $invalid_referer ) {

rewrite ^/

#return 403;

systemctl restart nginx.service

~* .(jpg|gif|jepg|bmp|ico)$ :這段正規表示式表示匹配不區分大小寫,以.jpg 或.gif 或.swf 結尾的檔案;

valid_referers :設定信任的網站,可以正常使用圖片;

後面的網址或者域名 :referer 中包含相關字串的網址;

if語句:如果連結的來源域名不在valid_referers所列出的列表中,$invalid_referer為1,


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22198239/viewspace-2868439/,如需轉載,請註明出處,否則將追究法律責任。

相關文章