前言
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优化还有很多很多,我这里就不一一举例出来了。
希望大家还有什么问题都可以与我交流探讨,互相学习学习。