nginx的优化技巧

前言

nginx作为Web服务器之一,说不出的优点,哈哈。之前用过Apache,发现有点臃肿,不够nginx灵活(个人意见,不喜勿喷)。用了一段nginx,发觉有几点优化nginx是可以做的。有兴趣的朋友请看看

1、gzip压缩优化

开启网站gzip压缩功能,是nginx优化的最简单也是最容易入手的一个手段。假如你的网站是500K,压缩后是350K左右。

gzip配置的常用参数

gzip
决定是否开启gzip模块
param:on|off
example:gzip on;gzip_buffers 
设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间
param1:int
param2:int(k) 后面单位是k
example: gzip_buffers 4 8k;gzip_comp_level
设置gzip压缩等级,等级越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大
param:1-9
example:gzip_com_level 1;gzip_min_length
当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩
param:int
example:gzip_min_length 1000;gzip_http_version
用于识别http协议的版本,早期的浏览器不支持gzip压缩,用户会看到乱码,所以为了支持前期版本加了此选项,目前此项基本可以忽略
param: 1.0|1.1
example:gzip_http_version 1.0gzip_proxied
Nginx做为反向代理的时候启用,
param:off|expired|no-cache|no-sotre|private|no_last_modified|no_etag|auth|any]
expample:gzip_proxied no-cache;
off – 关闭所有的代理结果数据压缩
expired – 启用压缩,如果header中包含”Expires”头信息
no-cache – 启用压缩,如果header中包含”Cache-Control:no-cache”头信息
no-store – 启用压缩,如果header中包含”Cache-Control:no-store”头信息
private – 启用压缩,如果header中包含”Cache-Control:private”头信息
no_last_modified – 启用压缩,如果header中包含”Last_Modified”头信息
no_etag – 启用压缩,如果header中包含“ETag”头信息
auth – 启用压缩,如果header中包含“Authorization”头信息
any – 无条件压缩所有结果数据gzip_types
设置需要压缩的MIME类型,非设置值不进行压缩
param:text/html|application/x-javascript|text/css|application/xml
example:gzip_types text/html;

在Linux下,编译nginx的配置文件

vi /etc/nginx/nginx.conf

然后配置为下:

server {

    listen 80; #监听端口
    server_name localohst; #监听域名
    gzip on; #开启gizip
    gzip_buffers 32 4K;#压缩在内存中缓冲32块 每块4K
    gzip_comp_level 6 ;#压缩级别 推荐6
    gzip_min_length 4000;#开始压缩的最小长度4bit
    gzip_types text/css text/xml apploation/x-javascript;#只对CSS、XML、JS文件进行压缩。 默认压缩text/html 不需要指定,否则报错
    
    location / {
        root /var/www/a; #根目录定位
        index index.html;
                }
        }

配置后,重启nginx即可。

访问网站后,可以F12查看Network,再看到Content-Encoding:gzip代表开启成功。

2、expires缓存

nginx可以通过设置expires页面缓存时间,达到不缓存或者是一直缓存的状态,减少服务器请求之外,也提升网站负载能力。

配置格式:expires[time|epoch|max|pff]

time:默认单位(s)
  expires 60s;//缓存60秒 s(second)代表秒
  expires 1h;//缓存2小时 h(hour)代表小时
  expires 30d;//缓存30天 d(day)代表天
  expires 12m;//缓存12个月 m(month)代表月

epoch:指定“Expires”的值为 1 January, 1970, 00:00:01 GMT。 

max:指定“Expires”的值为 31 December 2037 23:59:59 GMT,“Cache-Control”的值为10年。 

-1:指定“Expires”的值为当前服务器时间-1s,即永远过期。(负数:Cache-Control: no-cache,正数或零:Cache-Control: max-age = #(# 为您指定时间的秒数))。 

off:不修改“Expires”和”Cache-Control”的值。

例:

server {

    listen 80;  #监听端口
    server_name localohst;  #监听域名

    location /  {
        root /var/www/a;  #根目录定位
        index index.html index.php;
        }

    location ~ .*\.(jpg|jpeg|gif|png|js|css)$ {
        expires 5d;  #只对图片、JS及CSS缓存5天
        }

       }

expires配置使用方法不仅限于上面的例子。

3、事件模型优化

这一个事件模型,说真的,我也看得一脸懵逼,建议大家有兴趣的直接看这里

那讲到优化,nginx的连接处理特点是:不同的操作系统采用不同的IO模型。在linux下,使用的是epoll的IO多路复用模型。

我们打开events模块(详细),配置如下:

events {accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为onmulti_accept on; #设置一个进程是否同时接受多个网络连接,默认为offuse epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventportworker_connections 1024; # 最大连接数client_header_buffer_size 4k;open_file_cache max=2000 inactive=60s;open_file_cache_valid 60s;open_file_cache_min_uses 1}

4、隐藏版本号

随便暴露nginx的版本号是灰常危险的,所以通过以下方式隐藏:

启动nginx /usr/local/nginx/sbin/nginx ,是在配置文件中加入server_tokens off;参数禁止版本信息泄漏。

改完后,重启nginx即可。

5、防盗链优化

防盗链是什么?简单来说就是防止别人随意调用网站的图片,要想实现防盗链,直接打开nginx.conf,添加下面的配置:

location ~ .*\.(jpg|jpeg|JPG|png|gif|icon)$ {
        valid_referers blocked www.baidu.com google.com;  
        if ($invalid_referer) {
            return 404;
        }
}
## jpg|jpeg|JPG|png|gif|icon,这些是你想要屏蔽的文件类型,可以根据情况修改。
##只需要把文中 www.baidu.com google.com 修改为你允许显示你网站图片的其他网站域名,注意中间用空格分开,而不是逗号。

##假如要设置整个目录,可以这样写
location ~ ^/images/ {
	valid_referers none blocked www.baidu.com google.com;
	if ($invalid_referer) {
		return 404;
	}
	#rewrite ^/ http://a.timgle.com/404.jpg;
}

6、禁止恶意域名解析

总会有一些无聊的人,喜欢把域名解析到别人服务器上,但是不怕,有办法:

在nginx.conf下添加下面的配置:

server
{
    listen 80 default;
    server_name _;
    return 500;
}

最后

其实nginx优化还有很多很多,我这里就不一一举例出来了。

希望大家还有什么问题都可以与我交流探讨,互相学习学习。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注