1. 程式人生 > 其它 >Nginx優化與防盜鏈相關配置

Nginx優化與防盜鏈相關配置

Nignx優化與防盜鏈相關配置

一、隱藏 Nginx版本號

1、如何隱藏Nginx版本號及其必要

(1)為何需要隱藏Nginx版本號:在生產環境中,需要隱藏Ngnx的版本號,以避免安全漏洞的洩漏
(2)檢視Nginx版本號的方法:
使用fiddler工具在 Windows客戶端檢視 Nginx版本號
在 Centos系統中使用“curl -I 網址”命令檢視Nginx版本號

(3)nginx隱藏版本號的方法:修改配置檔案法、修改原始碼法

2、隱藏 Nginx版本號配置命令

方法一:
Nginx的配置檔案中的 server_tokens選項的值設定為off

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

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;	##新增,關閉版本號
}

systemctl restart nginx
curl -I http://192.168.177.11/  ##檢視版本號

方法二:
修改原始碼檔案,重新編譯安裝

vim /opt/nginx-1.12.0/src/core/nginx.h
#define nginx_version      1012000
#define NGINX_VERSION      "1.0.0"    #將原始的1.12.0修改為1.0.0
#define NGINX_VER          "IIS" NGINX_VERSION    #將原始的Nginx修改為IIS

#重新編譯安裝
cd /opt/nginx-1.12.0
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

make && make install

#將方法一中關閉的版本號重新開啟
vim /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens on;   #開啟

#重啟服務
systemctl restart nginx.service 

#檢視版本號是否隱藏
curl -I http://192.168.177.11/

二、修改使用者與組

vim /usr/local/nginx/conf/nginx.conf
user  nginx nginx;        #將前面的#註釋掉,然後修改使用者與組為nginx
worker_processes  1;

systemctl restart nginx.service
ps aux | grep nginx     #檢視使用者與組是否修改成功

在這裡插入圖片描述

三、配置快取時間

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens on;
    ......
    location / {
        root   html;
        index  index.html index.htm;
    }

     location ~ \.(gif|jpg|jepg|bmp|ico)$ {    #複製上面4行並修改
         root   html;
         expires 1d;       #設定快取時間為1天
     }

cd /usr/local/nginx/html/    #需要新增張圖片在nginx首頁中
[[email protected] html]#ls
50x.html   error.png.0  chuishi.jpg.0
error.png  chuishi.jpg     index.html

使用瀏覽器直接訪問chuishi.jpg圖片
http://192.168.177.11/chuishi.jpg

四、日誌分割

vim /opt/fengge.sh
#!/bin/bash
#rizhi fengge
day=$(date -d "-1 day" "+%Y%m%d")    #顯示前一天時間
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ] || mkdir -p $logs_path   #建立日誌檔案目錄
mv /usr/local/nginx/logs/access.log ${logs_path}/yy.com-access.log-$day   #移動並重命名日誌檔案
kill -USR1 $(cat $pid_path)      #重建新日誌檔案
find $logs_path -mtime +30 | xargs rm -rf   #刪除30天之前的日誌檔案

chmod +x /opt/fengge.sh 
/opt/fengge.sh 
ls /var/log/nginx/
ls /usr/local/nginx/logs/access.log

crontab -e      #設定定時任務進行日誌的分割收集
0 1 * * * /opt/fengge.sh

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

1、ctime (status time):
當修改檔案的許可權或者屬性的時候,就會更新這個時間, ctime並不是create time,更像是change time,只有當更新檔案的屬性或者許可權的時候才會更新這個時間,但是更改內容的話是不會更新這個時間。
2、atime (accesstime):
當使用這個檔案的時候就會更新這個時間。
3、mtime (modification time):
當修改檔案的內容資料的時候,就會更新這個時間,而更改許可權或者屬性,mtime不會改變,這就是和ctime的區別。

五、連線超時

HTTP有一個KeepAlive模式,它告訴web伺服器在處理完一個請求後保持這個TCP連線的開啟狀態。若接收到來自客戶端的其它請求,服務端會利用這個未被關閉的連線,而不需要再建立一個連線。
KeepAlive在一段時間內保持開啟狀態,它們會在這段時間內佔用資源。佔用過多就會影響效能。

vim /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens on;
    ......
    keepalive_timeout  65 180;
    client_header_timeout 80;
    client_body_timeout 80;

systemctl restart nginx.service 

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)。

六、更改程序數

cat /proc/cpuinfo | grep -c "physical id"    #檢視CPU核數
ps aux | grep nginx  #檢視nginx主程序中包含幾個子程序

vim /usr/local/nginx/conf/nginx.conf
user  nginx nginx;
worker_processes  2;    #修改為核數相同或者2倍
worker_cpu_affinity 01 10;   #設定每個程序由不同cpu處理,程序數配為2時為0001、0010、0100、1000

systemctl restart nginx.service

七、配置網頁壓縮

vim /usr/local/nginx/conf/nginx.conf
    gzip  on;       #將改行註釋取消掉開啟gzip壓縮功能,並新增下面內容
    gzip_min_length 1k;    #最小壓縮檔案大小
    gzip_buffers 4 64k;    #壓縮緩衝區,大小為4個64k緩衝區
    gzip_http_version 1.1;   #壓縮版本(預設為1.1,前端如果是squid2.5請使用1.0)
    gzip_comp_level 6;    #壓縮比率
    gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;   #壓縮型別,表示哪些網頁文件啟用壓縮功能
    gzip_vary on;   #支援前端快取伺服器儲存壓縮頁面

cd /usr/local/nginx/html/     #提前將game.jpg圖片上傳到該目錄下
vim index.html
<p><em>Thank you for using nginx.</em></p>
<img src="game.jpg">     #新增此行
</body>

systemctl restart nginx.service 

八、防盜鏈

配置盜鏈機

yum install -y httpd

vim /var/www/html/index.html
<html><body><h1>IT WORKS!</h1>
<img src="http://www.yy.com/chuishi.jpg"/>
</body></html>

echo "192.168.177.8 www.accp.com" >> /etc/hosts
echo "192.168.177.11 www.yy.com" >> /etc/hosts

systemctl restart httpd

配置防盜鏈

vim /usr/local/nginx/conf/nginx.conf
location ~* \.(gif|jpg|jepg|bmp|ico)$ {
            valid_referers *.yy.com yy.com;
            if ( $invalid_referer ) 
            rewrite ^/ http://www.yy.com/error.png;
            }
        }

systemctl restart nginx

~* \. (jpglgiflswf)s :這段正則表示式表示匹配不區分大小寫,以.jpg或.gif或.swf結尾的檔案;
valid referers :設定信任的網站,可以正常使用圖片;後面的網址或者域名: referer中包含相關字串的網址;
語句:如果連結的來源域名不在valid referers所列出的列表中, sinvalid referer為1,則執行後面的操作,即進行重寫或返回403頁面。

九、fpm引數優化

vim /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid

vim /usr/local/php/etc/php-fpm.d/www.conf
-----96行------
pm = dynamic  #fpm程序啟動方式,動態的
-----107行-----
pm.max children = 20  #fpm程序啟動的最大程序數-
------112-------
pm.start_servers = 5   #動態方式下啟動時預設開啟的程序數,在最小和最大之間
------117行-------
pm.min_spare_servers = 2  #動態方式下最小空閒程序數
------122行-------
pm.max_spare_servers = 8   #動態方式下最大空閒程序數

kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`      #重啟php-fpm
netstat -anpt | grep 9000