華傭網(wǎng)做最好的現(xiàn)貨瀝青返傭網(wǎng)站seo是指什么
實(shí)驗(yàn)一、隱藏版本號(hào)
?要把nginx的版本號(hào)隱藏起來,防止惡意攻擊
方法一:修改配置文件
在http模塊中加入一個(gè)命令
server_token off;
過程:
?備份,改配置文件一定要備份
?修改配置文件
?在http模塊中添加???server_tokens off;
重啟一下服務(wù) ,再回到網(wǎng)頁查看版本號(hào)是否被隱藏
?這時(shí)發(fā)現(xiàn)已經(jīng)被隱藏了
方法二:在源碼包里修改
在nginx源碼包里src/core/ 中nginx.h的文件中
修改源碼包
?
?
在源碼包里進(jìn)行修改要想生效,需要在源碼包的主目錄重新編譯一下
?
?
?在配置文件中把server_tokens打開
重啟服務(wù)?
?回到瀏覽器刷新一下,修改成功
總結(jié):兩個(gè)方法會(huì)一個(gè)即可,
實(shí)驗(yàn)二:nginx日志分割
nginx不自帶日志分割工具,需要手動(dòng)以腳本的形式進(jìn)行日志分割
?訪問成功記載access.log
訪問失敗記錄在error.log
先看一下日志的時(shí)間格式怎么寫?
?寫一個(gè)腳本
?
#!/bin/bash
# 獲取日期
d=$(date +%Y-%m-%d)# 定義存儲(chǔ)目錄
dir="/usr/local/nginx/logs"# 定義需要分割的源日志
logs_file='/usr/local/nginx/logs/access.log'
logs_error='/usr/local/nginx/logs/error.log'# 定義nginx的pid文件
pid_file='/usr/local/nginx/run/nginx.pid'if [ ! -d "$dir" ]
then
?? ?mkdir $dir
fi# 移動(dòng)日志并重命名文件
mv ${logs_file} ${dir}/access_$vxwlu0yf4.log
mv ${logs_error} ${dir}/error_$vxwlu0yf4.log# 發(fā)送kill -USR1信號(hào)給Nginx的主進(jìn)程號(hào),讓Nginx重新生成一個(gè)新的日志文件
kill -USR1 $(cat ${pid_file})#日志文件清理,將30天前的日志進(jìn)行清除
find $logs_path -mtime +30 -exec rm -rf {} \;
?
賦權(quán)執(zhí)行
查看一下log里面有兩個(gè)新的日志文件?
?里面記錄了8月5日的日志
實(shí)驗(yàn)三:nginx的頁面壓縮
頁面壓縮可以節(jié)約帶寬,提高用戶的訪問速度
壓縮的功能是默認(rèn)自帶的,可以不取消注釋
但是需要添加壓縮細(xì)節(jié),需要把gzip打開后進(jìn)行配置
修改配置文件
?
?取消注釋,開啟gzip的壓縮功能
?接著添加代碼
? ?gzip_min_length 1k; ? ? ? ?
? ?#最小壓縮文件的大小 ? ? ?
? ?gzip_buffers 4 64k; ? ? ?? ?#壓縮緩沖區(qū),大小為4個(gè)64K緩沖區(qū),Nginx 會(huì)使用 4 個(gè) 64KB 大小的緩沖區(qū)來存儲(chǔ)壓縮后的數(shù)據(jù)。
? ?gzip_http_version 1.1; ? ?? ?#壓縮版本,默認(rèn)為1.1
? ?gzip_comp_level 6; ? ? ? ?? ?#壓縮比率(壓縮等級(jí)為1-9,6是中等等級(jí),也是常用等級(jí))Gzip 壓縮級(jí)別的范圍是 1 到 9,
? ?其中 1 表示壓縮速度最快,但壓縮比最低,9 表示壓縮速度最慢,但壓縮比最高。默認(rèn)值為 1。
? ?gzip_vary on; ? ? ? ? ? ?? ?#支持前端緩存服務(wù)器支持壓縮頁面
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;
#壓縮的類型,哪些文檔啟用壓縮功能
?? ??? ??? ??? ??? ??? ??? ?
重啟服務(wù)使配置生效?
?刷新一下瀏覽器,看gzip壓縮功能是否打開
實(shí)驗(yàn)四:圖片緩存
?拖一個(gè)圖片到html中
可以在網(wǎng)頁看到拖入的圖片,f12查看一下,Cache-Control:max-age=0 表示圖片沒有緩存,下次查看圖片還需要把圖片再下載一次,下面設(shè)一個(gè)緩存
在location塊下面直接添加?
~*:正則匹配
\.:就是點(diǎn)
(gif|jpg|jepg|bmp|ico):里面不能用png格式的,會(huì)陷入死循環(huán)
獲取圖片的根目錄為? root? html
expires 1d; ? ?#設(shè)置緩存時(shí)間為一天; ? ? ? ??
重啟一下讓配置生效?
?在瀏覽器里刷新一下并查看,緩存時(shí)間已經(jīng)改為1天
連接超時(shí):
連接超時(shí)在配置文件中的位置
?
http1.1會(huì)有一個(gè)keepalive模式,主要作用是告訴web服務(wù)器,他在處理完一個(gè)請(qǐng)求之后保持當(dāng)前連接的tcp狀態(tài)為打開狀態(tài),也就是在請(qǐng)求完之后不會(huì)立刻關(guān)閉,而是保持一個(gè)打開的狀態(tài)。
如果當(dāng)前連接有新的請(qǐng)求,服務(wù)端就會(huì)利用這個(gè)沒有關(guān)閉的連接,繼續(xù)給客戶端響應(yīng),不需要再建立一個(gè)新的連接。大大節(jié)約了資源。
keepalive在一段時(shí)間之內(nèi)保持打開狀態(tài),在這段時(shí)間內(nèi)還是會(huì)占用資源,占用過多會(huì)影響性能
圖中的keepalive_timeout? 65;? 意思是tcp連接最多可以保持65秒
設(shè)置為0,就是禁用了keepalive功能。只要請(qǐng)求完成立刻關(guān)閉tcp連接
實(shí)驗(yàn)五:nginx的并發(fā)設(shè)置
nginx的并發(fā)設(shè)置:在高并發(fā)場(chǎng)景中,需要啟動(dòng)更多的nginx進(jìn)程以保證響應(yīng)速度,可以更快的處理用戶的請(qǐng)求,避免堵塞。
1、cpu的核心數(shù)來進(jìn)行設(shè)置
?cat /proc/cpuinfo |grep processor|wc -l? ? ? ? 查看cpu核心數(shù)
2、設(shè)置worker進(jìn)程綁定到指定的cpu的命令,減少cpu切換帶來的開銷。
確保worker進(jìn)程在一個(gè)獨(dú)立的cpu核心上運(yùn)行(在工作中也用得到)
?修改配置文件
?把1改成4
重啟服務(wù)?
?查看一下進(jìn)程,worker進(jìn)程變?yōu)?個(gè)
?每個(gè)work進(jìn)程可以處理1024個(gè)文件數(shù),總共可以處理的文件數(shù)為4*1024=4096個(gè)
但是還需要使用ulimit? -n解除限制
面試會(huì)問
設(shè)置worker進(jìn)程綁定到指定的cpu的命令,減少cpu切換帶來的開銷。
確保worker進(jìn)程在一個(gè)獨(dú)立的cpu核心上運(yùn)行(在工作中也用得到)
01表示cpu1? 10表示cpu2? 100表示cpu3? 這個(gè)是按二進(jìn)制轉(zhuǎn)10進(jìn)制算的
在生產(chǎn)中worker一般設(shè)置為4,訪問量不大時(shí)1也足夠了,如果要擴(kuò)展,最多8或16個(gè)
8個(gè)以上的worker進(jìn)程就不會(huì)再提高性能了,反而會(huì)使性能降低,8個(gè)足夠了
worker_cpu_affinity? 單個(gè)worker進(jìn)程可以不綁定cpu
TIME_WAIT:不是一個(gè)報(bào)錯(cuò)信息,是tcp連接狀態(tài)中的一種狀態(tài),出現(xiàn)在tcp連接的四次揮手中
處于FIN=1和ack=1之間
當(dāng)連接的乙方發(fā)送FIN報(bào)文,而且收到了對(duì)方的ack報(bào)文之后,就會(huì)進(jìn)入TIME_WAIT? tcp處理等待的狀態(tài),是有一個(gè)持續(xù)時(shí)間,65秒,確保網(wǎng)絡(luò)中的所有數(shù)據(jù)包都被完全處理完畢。
TIME_OUT有兩個(gè)作用:1、確保可靠的關(guān)閉連接,如果立刻關(guān)閉連接,舊的數(shù)據(jù)包也會(huì)被處理,從而會(huì)干擾新的連接
2、避免連接復(fù)用,TIME_WAIT的時(shí)間太短,可能會(huì)導(dǎo)致舊的連接仍然在網(wǎng)絡(luò)中,誤認(rèn)為是新的連接,導(dǎo)致連接復(fù)用,數(shù)據(jù)傳輸紊亂。
而且在連接的生命周期中,TIME_WAIT占有的資源是非常小的,而且對(duì)服務(wù)器整體性能的影響也很有限。大量的短鏈接頻繁的創(chuàng)建的銷毀,或者大并發(fā)連接時(shí)(負(fù)載均衡),TIME_WAIT連接會(huì)積累,服務(wù)器會(huì)出現(xiàn)大量的TIME_WAIT狀態(tài)的連接,在這種情況下需要優(yōu)化處理。
內(nèi)核設(shè)置,進(jìn)行優(yōu)化
查看系統(tǒng)的所有tcp連接的狀態(tài):(必背,面試題)
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
tcp的連接狀態(tài):
CLOSED(關(guān)閉):表示該連接處于未活動(dòng)狀態(tài),或者連接已經(jīng)關(guān)閉。
LISTEN(監(jiān)聽):表示服務(wù)器正在等待來自客戶端的連接請(qǐng)求,處于監(jiān)聽狀態(tài)。
SYN_RECV(SYN 接收):表示服務(wù)器已經(jīng)接收到來自客戶端的 SYN 請(qǐng)求(連接請(qǐng)求),正在等待確認(rèn)。
SYN_SENT(SYN 發(fā)送):表示應(yīng)用程序已經(jīng)向服務(wù)器發(fā)送了 SYN 請(qǐng)求,正在等待服務(wù)器確認(rèn)。
ESTABLISHED(已建立):表示連接已經(jīng)建立,正常的數(shù)據(jù)傳輸階段。
FIN_WAIT1(終止等待1):表示應(yīng)用程序已經(jīng)發(fā)送了連接關(guān)閉請(qǐng)求(FIN),正在等待另一端的確認(rèn)。
FIN_WAIT2(終止等待2):表示另一端已經(jīng)確認(rèn)連接關(guān)閉請(qǐng)求,正在等待另一端發(fā)送連接關(guān)閉請(qǐng)求。
CLOSE_WAIT(關(guān)閉等待):表示另一端已經(jīng)關(guān)閉連接,但本地應(yīng)用程序還未關(guān)閉連接。
CLOSING(正在關(guān)閉):表示雙方同時(shí)嘗試關(guān)閉連接。
TIME_WAIT(時(shí)間等待):表示連接已經(jīng)關(guān)閉,但仍在等待一段時(shí)間,以確保網(wǎng)絡(luò)中所有的數(shù)據(jù)包都已經(jīng)被正確處理。
LAST_ACK(最后確認(rèn)):表示應(yīng)用程序已經(jīng)發(fā)送了最后的確認(rèn),等待另一端的確認(rèn)后進(jìn)入 CLOSED 狀態(tài)。
如何清理time_wait?? ?修改內(nèi)核文件
內(nèi)核文件位置
?
net.ipv4.tcp_syncookies = 1 ? ? ??
#表示開啟SYN Cookies。當(dāng)出現(xiàn)SYN等待隊(duì)列溢出時(shí),啟用cookies來處理請(qǐng)求。net.ipv4.tcp_tw_reuse=1
#讓TIME_WAIT狀態(tài)可以重用,這樣即使TIME_WAIT占滿了所有端口,也不會(huì)拒絕新的請(qǐng)求造成障礙 默認(rèn)是0。net.ipv4.tcp_tw_recycle=1 ? ? ? ??
#讓TIME_WAIT盡快回收 默認(rèn)0。net.ipv4.tcp_fin_timeout=65 ? ? ? ?
#表示如果端口由本端要求關(guān)閉,這個(gè)參數(shù)決定了它保持在FIN-WAIT-2狀態(tài)的時(shí)間。
實(shí)驗(yàn)六:配置防盜鏈
valid_referers :設(shè)置信任的網(wǎng)站,可以正常使用圖片;
none:允許沒有http_refer的請(qǐng)求訪問資源(根據(jù)Referer的定義,它的作用是指示一個(gè)請(qǐng)求是從哪里鏈接過來的,如果直接在瀏覽器的地址欄中輸入一個(gè)資源的URL地址,那么這種請(qǐng)求是不會(huì)包含 Referer 字段的),如 http://www.kgc.com/game.jpg
我們使用 http://www.kgc.com 訪問顯示的圖片,可以理解成 http://www.kgc.com/game.jpg 這個(gè)請(qǐng)求是從 http://www.kgc.com 這個(gè)鏈接過來的。
blocked:允許不是http://開頭的,不帶協(xié)議的請(qǐng)求訪問資源;?
*.kgc.com:只允許來自指定域名的請(qǐng)求訪問資源,如 http://www.kgc.com
$invalid_referer:只要不是valid_referers設(shè)置現(xiàn)任的網(wǎng)站,都為true
vim /usr/local/nginx/conf/nginx.conf
http {
......
?? ?server {
?? ?......
?? ??? ?location ~* \.(jpg|gif|swf)$ {
?? ??? ??? ?valid_referers none blocked *.kgc.com kgc.com;
?? ??? ??? ?if ( $invalid_referer ) {
?? ??? ??? ??? ?rewrite ^/ http://www.kgc.com/error.png;
?? ??? ??? ??? ?#return 403;
? ? ? ? ? ? }
? ? ? ? }
?? ?......
?? ?}
}
?
網(wǎng)頁準(zhǔn)備:
Web源主機(jī)(192.168.146.20)配置:
cd /usr/local/nginx/html
將game.jpg、error.png文件傳到/usr/local/nginx/html目錄下
vim index.html
......?
<img src="game.jpg"/>
</body>
</html>echo "192.168.146.20 www.kgc.com" >> /etc/hosts
echo "192.168.146.30 www.benet.com" >> /etc/hosts
盜鏈網(wǎng)站主機(jī)(192.168.146.30):
cd /usr/local/nginx/html
vim index.html
......?
<img src="http://www.kgc.com/game.jpg"/>
</body>
</html>echo "192.168.146.20 www.kgc.com" >> /etc/hosts
echo "192.168.146.30 www.benet.com" >> /etc/hosts
在盜圖網(wǎng)站主機(jī)上進(jìn)行瀏覽器驗(yàn)證
http://www.benet.com