Yii2结合Nginx性能优化

3 篇文章 0 订阅
Nginx配置静态文件缓存
一些常用的图片、js、css文件,我们会将其放入到代码的工程文件当中。但是为了提高服务器的响应速度,我们可以将这些资源文件直接交给nginx去处理,这样的访问会提高许多。

配置项如下:
1.缓存静态资源之图片资源

Nginx搭建反向代理服务器过程详解
2.缓存静态资源之样式文件

Nginx搭建反向代理服务器过程详解
3.缓存静态资源之脚本文件

Nginx搭建反向代理服务器过程详解

然后创建root 所指的文件夹路径,将对应的资源拷贝到指定的文件夹当中去,设置了缓冲时间后该文件会存入到缓存中在指定时间内不会过期。这样nginx服务器从缓冲中取资源的速度会比去硬盘中去取资源要快很多(这是一个常识).



Nginx负载均衡的配置
这里的负载均衡的配置依赖于一个重要的配置叫做反向代理,其实比较简单。因为负载均衡是通过一个内网加代理服务器连接外网,这样的话通过代理服务器去访问真实的内容服务器,而内容服务器需要真实的用户IP以及主机,所以通这样的方式可以传递过去。

最主要的是设置你的集群服务器的IP、权重比,还有每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
默认无配置的为轮询机制。nginx当然也支持多服务负载均衡。
先进行配置
upstream backend{
     server 192.168.0.1: 9090 down;
     server 192.168.0.2:6363 max_fails=3 fail_timeout=30s weight=10;
     //ip_hash;
     //fair ;
     //keepalive 10000;
}
每个服务状态设置为:
1.down 表示当前服务不可用
2.weight 默认为1.weight越大,负载的权重就越大,请求越容易命中。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
4.fail_timeout:   max_fails次失败后,在设定的时间内不会在从这里请求此服务器。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
6.ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
7.fair:按后台服务器的响应时间来分配请求。
8.keepalive:激活到upstream服务器的连接缓存。

其他
client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
配置如下:
server {
  ….
  server name : www.xxxx.com
  listen:80
 location / {
      proxy_set_header   Host    $host; 
     proxy_set_header   X-Real-IP   $remote_addr; 
     proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 

     //内服务器指向内容服务器 前面配置好的backend

     proxy_pass http://backend;
  }
}



Nginx 长连接配置
针对连接在HTTP1.1开始支持长连接,对于服务器而言这样损失掉一定的性能,来提高访问的速度(建立连接的速度会加快),俗话说有得必有失,对于两个服务器频繁交互进行HTTP请求是有利的,因此配置keepalive对于量大的业务是一个很好的选择,负载均衡一小节中介绍了一下keepalive相关参数。
配置如下:
http {
    keepalive_timeout  120s 120s;
    keepalive_requests 10000;
}
keepalive_requests指令用于设置一个keep-alive连接上可以服务的请求的最大数量。当最大请求数量达到时,连接被关闭。默认是100。
keepalive_timeout指令的语法:
Syntax:    keepalive_timeout timeout [header_timeout];
Default:    keepalive_timeout 75s;
Context:    http, server, location
第一个参数设置keep-alive客户端连接在服务器端保持开启的超时值。值为0会禁用keep-alive客户端连接。可选的第二个参数在响应的header域中设置一个值“Keep-Alive: timeout=time”。这两个参数可以不一样。


结合Yii2框架进行优化
1.先说一个很重要的日志文件,对于Yii2的app来说我们可以很方便的去配置日志。我们可以关闭access_log与error_log在Yii2应用中去配置日志,但是这只是针对于应用级别的配置,只适用于服务器的单应用简单的服务器。这对于性能来说略微提高,记录日志是一个很重要的习惯。
2.再说一下更方便更高效的片段缓存与页面缓存,针对于这些问题我们可以很方便的将一些耗时较长(从数据库读取耗时长,数据量大等特点)生成的页面元素我们可以暂时的将其存储起来,再有相同的请求时不会再重复生成而是从缓存当中读取,Yii当然也提供了极好的方法,可以对缓存的内容设置过期时间也可以设置更新依赖。
方法如下:
if ($this->beginCache($id, ['duration' => 3600])) {
    // ... 在此生成内容 ...
    $this->endCache();
}

$dependency = [
    'class' => 'yii\caching\DbDependency’,//Yii中的依赖不止这一种,有兴趣的同学可以从网上搜取一下
    'sql' => 'SELECT MAX(updated_at) FROM post',
];
if ($this->beginCache($id, ['dependency' => $dependency])) {
    // ... 在此生成内容 ...
    $this->endCache();
}

if ($this->beginCache($id, ['variations' => [Yii::$app->language]])) {
    // ... 在此生成内容 ...
    $this->endCache();
}

if ($this->beginCache($id, ['enabled' => Yii::$app->request->isGet])) {//开关片段缓存
    // ... 在此生成内容 ...
    $this->endCache();
}

if ($this->beginCache($id1)) { 
    // ...在此生成内容...
     //动态内容:这段代码每次都会被执行,得到不同的结果
    echo $this->renderDynamic('return Yii::$app->user->identity->name;');
    // ...在此生成内容...
    $this->endCache();
}

页面缓存是整个页面都会被存入到缓存中,对于一些静态页面,或者是少量动态内容的我们可以采取这样的方式,页面缓存的方式跟片段缓存有略微的差别,它们都支持 durationdependenciesvariations enabled 配置选项。
public function behaviors()
{
    return [
        [
            'class' => 'yii\filters\PageCache',
            'only' => ['index'],
            'duration' => 60,
            'variations' => [
                \Yii::$app->language,
            ],
            'dependency' => [
                'class' => 'yii\caching\DbDependency',
                'sql' => 'SELECT COUNT(*) FROM post',
            ],
        ],
    ];
}

还有一种适用分布式缓存的思想,在Yii官方文档中叫做HTTP的缓存。重所周知标记HTTP的缓存有两个标记:ETag,LastModified头.当页面使 session 时,PHP 将会按照 PHP.INI 中所设置的 session.cache_limiter 值自动发送一些缓存相关的 HTTP 头。这些 HTTP 头有可能会干扰你原本设置的 HttpCache 或让其失效。为了避免此问题,默认情况下 HttpCache 禁止 自动发送这些头。想改变这一行为,可以配置 yii\filters\HttpCache::sessionCacheLimiter 属性。该属性接受一个 字符串值,包括 publicprivateprivate_no_expire, 和 nocache

public function behaviors()
{
    return [
        [
            'class' => 'yii\filters\HttpCache',
            'only' => ['view'],
            ‘cacheControlHeader’ => ' public, max-age=7200’//默认为‘ public, max-age=7200
            'etagSeed' => function ($action, $params) {
                $post = $this->findModel(\Yii::$app->request->get('id'));
                return serialize([$post->title, $post->content]);
            },
          /*'lastModified' => function ($action, $params) {
                $q = new \yii\db\Query();
                return $q->from('post')->max('updated_at');
            },
          */
        ],
    ];
}
3.未完待续
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值