Nginx網頁優化與安全

1、隱藏版本號

1.1 顯示版本號

1.1.1 用Fiddler工具抓取數據包

1.1.2 使用curl命令

curl -I http://192.168.80.11

1.2 隱藏版本號具體操做

1.2.1 方法一:修改配置文件方式

1.vim /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;		#添加,關閉版本號
}

2.systemctl restart nginx
3.curl -I http://192.168.80.11


1.2.2 方法二:修改源碼文件,從新編譯安裝

1.vim /opt/nginx-1.12.0/src/core/nginx.h
\#define NGINX_VERSION "1.1.1" 					#修改版本號
\#define NGINX_VER "apache" NGINX_VERSION 		        #修改服務器類型
2.cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
3.make && make install
4.vim /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens on;
	......
}
5.systemctl restart nginx
6.curl -I http://192.168.80.11




2、修改用戶與組

1.vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; 			#取消註釋,修改用戶爲 nginx ,組爲 nginx
2.systemctl restart nginx
3.ps aux | grep nginx                   #主進程由root建立,子進程由nginx建立


3、網頁緩存

vim /usr/local/nginx/conf/nginx.conf
http {
......
	server {
	...... 
		location ~ \.(gif|jpg|jepg|png)$ { 	                 #加入新的 location,以圖片做爲緩存對象
			root html;
			expires 1d;				         #指定緩存時間,1天
		}
......
	}
}



4、日誌分割

vim /root/rizhi.sh
\#!/bin/bash
1.#顯示前一天的時間
day=$(date -d "-1 day" "+%Y%m%d")              
\#day=$(date -d "-1 day" "+%F")    
2.logs_path="/var/log/nginx"
3.pid_path=`cat /usr/local/nginx/logs/nginx.pid`
4.#建立日誌文件目錄
[ -d $logs_path ] || mkdir -p $logs_path       
5.#移動並重命名日誌文件
mv /usr/local/nginx/logs/access.log ${logs_path}/gxd.com-access.log-{$day}
6.#重建日誌文件
kill -USR1 $pid_path
7.#刪除30天前的日誌文件                   
find $logs_path -mtime +30 -exec rm -rf {} \;
#find $logs_path -mtime +30 | xargs rm -rf




注:在linux操做系統中,每一個文件都有不少的時間參數,其中有三個比較主要,分別是ctime,atime,mtime
1.ctime(status time):
當修改文件的權限或者屬性的時候,就會更新這個時間,ctime並非create time,更像是change time,只有當更新文件的屬性或者權限的時候纔會更新這個時間,可是更改內容的話是不會更新這個時間 2.atime(accesstime):
當使用這個文件的時候就會更新這個時間
3.mtime(modification time):
當修改文件的內容數據的時候,就會更新這個時間,而更改權限或者屬性,mtime不會改變,這就是和ctime的區別
javascript

5、鏈接超時

vim /usr/local/nginx/conf/nginx.conf
http {
...... 
    keepalive_timeout 65 180;
    client_header_timeout 80;
    client_body_timeout 80;
...... 
}

注:1.HTTP有一個KeepAlive模式,它告訴web服務器在處理完一個請求後保持這個TCP鏈接的打開狀態。若接收到來自客戶端的其它請求,服務端會利用這個未被關閉的鏈接,而不須要再創建一個鏈接
2.KeepAlive 在一段時間內保持打開狀態,它們會在這段時間內佔用資源,佔用過多就會影響性能
1)keepalive_timeout
指定KeepAlive的超時時間(timeout)。指定每一個TCP鏈接最多能夠保持多長時間,服務器將會在這個時間後關閉鏈接。 Nginx的默認值是65秒,有些瀏覽器最多隻保持 60 秒,因此能夠設定爲 60 秒。若將它設置爲0,就禁止了keepalive 鏈接
第二個參數(可選的)指定了在響應頭Keep-Alive:timeout=time中的time值。這個頭可以讓一些瀏覽器主動關閉鏈接,這樣服務器就沒必要去關閉鏈接了。沒有這個參數,Nginx 不會發送 Keep-Alive 響應頭
2)client_header_timeout
客戶端向服務端發送一個完整的 request header 的超時時間。若是客戶端在指定時間內沒有發送一個完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)
3)client_body_timeout
指定客戶端與服務端創建鏈接後發送 request body 的超時時間。若是客戶端在指定時間內沒有發送任何內容,Nginx 返回 HTTP 408(Request Timed Out)

php

6、更改進程數

1.cat /proc/cpuinfo | grep -c "physical id"                 #查看cpu核數
2.ps aux | grep nginx					    #查看nginx主進程中包含幾個子進程
3.vim /usr/local/nginx/conf/nginx.conf
worker_processes  2;				            #修改成核數相同或者2倍
worker_cpu_affinity 01 10;			            #設置每一個進程由不一樣cpu處理,進程數配2 4 6 8分別爲0001 0010 0100 1000 
4.systemctl restart nginx
5.壓力測試,看cpu可否處理這麼多鏈接數



7、網頁壓縮

7.1 修改配置文件

vim /usr/local/nginx/conf/nginx.conf
http {
...... 
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_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;      #壓縮類型,表示哪些網頁文檔啓用壓縮功能
...... 
}

7.2 修改網頁文件


7.3 瀏覽器測試

8、防盜鏈

8.1 準備兩張不一樣格式的圖片

8.2 修改配置文件

vim /usr/local/nginx/conf/nginx.conf
http {
......
	server {
	......
		location ~* \.(png|gif|swf)$ {
			valid_referers none  blocked *.gxd.com;
			if ( $invalid_referer ) {
				rewrite ^/ http://www.gxd.com/error.jpg;
            }
        }
	......
	}
}

注:1.~* .(png|gif|swf)$ :這段正則表達式表示匹配不區分大小寫,以.jpg 或.gif 或.swf 結尾的文件
2.valid_referers :設置信任的網站,能夠正常使用圖片
3.none:容許沒有http_refer的請求訪問資源(根據Referer的定義,它的做用是指示一個請求是從哪裏連接過來的,若是直接在瀏覽器的地址欄中輸入一個資源的URL地址,那麼這種請求是不會包含 Referer字段的),如http://www.gxd.com/gxd.jpg 咱們使用 http://www.gxd.com訪問顯示的圖片,能夠理解成 http://www.gxd.com/gxd.jpg 這個請求是從 http://www.gxd.com這個連接過來的
4.blocked:容許不是http://開頭的,不帶協議的請求訪問資源;
5.*.gxd.com:只容許來自指定域名的請求訪問資源,如 http://www.gxd.com
6.if語句:若是連接的來源域名不在valid_referers所列出的列表中,$invalid_referer爲true,則執行後面的操做,即進行重寫或返回 403 頁面
css

8.3 配置正向解析文件

echo "192.168.80.11 www.gxd.com" >> /etc/hosts
echo "192.168.80.11 www.ggg.com" >> /etc/hosts

8.4 瀏覽器訪問測試

1.www.gxd.com

2.www.ggg.com
html

相關文章
相關標籤/搜索