Nginx優化與防盜鏈相關配置
Nignx優化與防盜鏈相關配置
一、隱藏 Nginx版本號
1、如何隱藏Nginx版本號及其必要
(1)為何需要隱藏Nginx版本號:在生產環境中,需要隱藏Ngnx的版本號,以避免安全漏洞的洩漏
(2)檢視Nginx版本號的方法:
使用fiddler工具在 Windows客戶端檢視 Nginx版本號
在 Centos系統中使用“curl -I 網址”命令檢視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