配置高性能靜態、高性能動態網站

一、配置高性能靜態網站
1、HTTP通信大致分成3個階段:
 1)TCP連接建立階段:瀏覽器和服務器端通過3次握手,建立連接,達到establish狀態。
 2)HTTP協議通訊階段:此時客戶端瀏覽器發起HTTP請求,網站服務端響應。在開啓了keepalive以後,在同一個TCP連接後,瀏覽器可以發起多個HTTP請求。在HTTP協議通信階段,對應每一個瀏覽器請求都會產生一個請求,雙方採用“一問一答”的形式。
 3)TCP連接銷燬階段:在瀏覽器確認沒有後續請求後,瀏覽器調用Socket Close系統函數,想服務器端表明本端關閉寫入。當服務器端也沒有更多的數據需要傳輸的時候,同樣調用Socket Close系統函數,反饋給瀏覽器。


2、HTTP請求頭部信息:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 
#以’ 爲分隔,q表明瀏覽器對這種類型的喜好程度,默認是1,但它更傾向於前3種輸出的類型。
Accept-Encoding: gzip, deflate, br                    #表面瀏覽器支持服務器使用gzip,deflate,br,對輸出內容進行壓縮。
Accept-Language: zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7  #瀏覽器喜歡服務器給他輸出是中文,還是英文。
Cache-Control: no-cache                               #資源在瀏覽器上的緩存時間。
Connection: keep-alive                                #是否支持長連接。
Cookie: BAIDUID=1B0FA0FDBA2CFB1D109EBC82E30926D3:FG=1; PSTM=1554169033; BIDUPSID=F2584A2E7885557C87199431ED81E124; BD_UPN=12314753; BDUSS=W9lR1VmWC1GVWFYV09FM1VhNkZCOWFUTjlYNS1yRXQ1ZXJ5NHNBRUtxZDFmeTVkSVFBQUFBJCQAAAAAAAAAAAEAAAALec8KbXRsZHN3ejMxMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHXyBl118gZdN; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; MCITY=-179%3A; delPer=0; BD_CK_SAM=1; PSINO=5; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; ZD_ENTRY=baidu; BD_HOME=1; H_PS_PSSID=1440_21088_20698_29567_29221_26350_22157; H_PS_645EC=7382GJQPmEyZfGilEnA%2FplWH9F27RhJtHf1D%2BbsMYvuKKsvXcWwsOmGoYJojxPtjmRAk
Host: www.baidu.com                                   #需要訪問的資源域名
Pragma: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36     
                                                      #瀏覽器版本號


3、HTTP響應頭部信息:
Bdpagetype: 2
Bdqid: 0xcba0622c005f5905
Cache-Control: private
Connection: Keep-Alive                   #通知瀏覽器可以在一個TCP連接中,可以發送多個HTTP請求。
Content-Encoding: gzip                   #告訴瀏覽器使用gzip壓縮。
Content-Type: text/html;charset=utf-8    #通知瀏覽器使用對應的方法來解析HTTP內容。
Date: Wed, 16 Oct 2019 01:21:37 GMT      #網站服務器產生HTTP響應時間。
Expires: Wed, 16 Oct 2019 01:21:37 GMT   #資源在瀏覽器中的緩存時間
Server: BWS/1.1                          #表明網站使用的軟件。
Set-Cookie: BDSVRTM=289; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=1440_21088_20698_29567_29221_26350_22157; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Transfer-Encoding: chunked   
#表面網站使用的傳輸方法,一般有2種方式:
1)一種通過Content-Length告訴瀏覽器,本次HTTP相應的大小,瀏覽器在收到此大小的響應體後確認接收完畢,這種方法一般在靜態文件.html,.js,.css等。
2)另外一種是chunked,這種方式在http響應頭部不告訴瀏覽器,響應體的大小,而是採用分多段傳輸,在最後一段傳輸內容爲0,表示傳輸完畢,
這種方式一般應用與圖片等本身使用chunks存儲的靜態文件和動態程序輸出的內容。


4、Nginx緩存的配置
        location ~ \.(gif|jpg|jpeg|png|bmp|ico|css|js)$ {
            expires max;   #參數可選7d,max,-1,off。
        }
1)7d,表示緩存7天。
2)epoch,表示1 january 1970,0.0.1 GMT
3) -1, 表示不緩存
4)off,不修改expire和Cache-control的值,此爲默認值

5、壓縮配置方法
gzip on
1)開啓gzip,文件頁面大小爲頁面774+33.9kb,壓縮都圖片不起左右。
2)未開啓,頁面986b+圖片33.9Kb。


6、防盜鏈設置
注意:配置防盜鏈的位置在最前面。
       location ~* ^.*\.(gif|jpeg|png)$ {
            valid_referers none blocked *.test.com;
            if ($invalid_referer)
                {
                   return 403;
                }
        }


        location / {
            root   html;
            index  index.html index.htm;
        }
       
7、實現靜態文件的安全下載,防止非授權的用戶訪問該資源
使用Nginx的X-Accel-Redirect控制頭部,可以滿足大部分的安全下載需要。
原理:Nginx把收到用戶的下載請求,發送到後端程序,例如PHP或JAVA等,這些驗證
程序會根據用戶發過來的cookie信息或其他信息進行校驗,如果成功,則向Nginx返回
X-Accel-Redirect頭部,通知nginx向客戶端輸出靜態文件;否則直接拒絕用戶的非法請求。
Nginx中的配置:
location /download/ {
    internal;  #該目錄不允許用戶直接訪問,僅僅可以由後端程序通過x-Accel-Redirect頭部通知nginx返回給用戶。
}

二、配置高性能動態網站
含義:所謂動態網站,是指根據用戶的請求數據實時計算出頁面內容的網站。PHP和JAVA都是開放動態網站中使用比較廣泛的編程語言。
相應的PHP-FPM和Tomcat是兩種編程語言的運行環境。
1、PHP-FPM優化
    1)在php.ini中,需要設置參數max_execution_time,表示每個PHP程序執行的最長時間,默認是30s。通常設置成5s,這樣防止執行時間過長的php程序會吧PFM的進程耗盡。
    2)在php-fpm.conf中,指定error_log路徑,指定log_level爲warning,指定slowlog的輸出位置,Request_slow_timeout是指超過多少時間以後,需要把程序的調用輸出到slowlog裏面,建議值爲1S,Request_terminate_timeout指單一請求超過多少時間後,FPM主進程會把子進程關閉,通常建議設置爲5S,這樣防止執行時間過長的php程序會吧PFM的進程耗盡。

2、Tomcat優化
1)增加默認可以使用的內存大小,在catalina.sh這個配置文件中,通過增加tomcat可以使用的內存。
JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
cygwin=false
#主要是修改-Xms和-Xmx選項設置相對大一點。

2)Mysql JDBC連接丟失的問題解決
在Tomcat中,一般使用jdbc的連接池去操作Mysql數據庫,在Tomcat中可以看到連接丟失的情況。
jdbc:mysql://mysql-ip:3306/?autoReconnect=true    #添加自動重連接機制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章