配置高性能静态、高性能动态网站

一、配置高性能静态网站
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    #添加自动重连接机制。

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