Nginx的优化
1、Nginx配置文件优化
#当实际环境中域名主机多了,会导致主配置文件的条目变多,看的时候会出现一定的误差,所以我们可以使用Include来优化配置文件
#主配置文件nginx.conf的配置
worker_processes 10;
error_log /var/log/nginx/error.log crit;
events {
worker_connections 1024;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include /usr/local/nginx/extra/nginx_vhosts.conf; #这里我给的绝对路径,也可以给相对路径
}
#包含文件nginx_vhosts.conf
server{
listen 80;
server_name www.daniel.org daniel.org;
error_log /var/log/nginx/daniel/daniel_error.log;
access_log /var/log/nginx/daniel/daniel_access.log;
location / {
root /var/www/html/www;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/lcoal/nginx/html;
}
}
2、expires缓存优化
什么是expires?当你访问百度的一张照片的时候,百度可以使用expires来决定这张图片字啊你本地缓存多久,就可以不用再下载了,比如一个小时。缺点就是,如果百度换图片了,那么用户还是显示的原来的内容,也可以解决这个问题,那就是在服务器端改名弥补过期缓存问题
#案例1
location ~.*\.(gif|jpg|jpeg|png|bmp|swf)$ #以括号里为扩展名的缓存十年
{
root /var/www/html/www
expires 3650d;
}
#案例2
location ~.*\.(js|css)?$ #以括号里为扩展名的缓存三十天
{
root /var/www/html/www
expires 30d;
}
#特别注意:location内容一般要放到虚拟主机配置中,即server标签中
#location修饰符
= 使用精确匹配并终止搜索
~ 区分大小写的正则表达式匹配
~* 不区分大小写的正则表达式匹配
^~ 如果该location是最佳的匹配,那么对于匹配这个location的字符串不再进行正则表达式检测。注意这不是一个正则表达式匹配-它的目的是优先于正在表达式的匹配
#我们curl一下看看
[root@localhost nginx]# curl -I www.daniel.org/a.jpg
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Tue, 30 Jan 2018 06:04:47 GMT
Content-Type: image/jpeg
Content-Length: 350272
Last-Modified: Wed, 22 Nov 2017 14:34:08 GMT
Connection: keep-alive
ETag: "5a158ae0-55840"
Expires: Fri, 28 Jan 2028 06:04:47 GMT #到期时间2028年
Cache-Control: max-age=315360000
Accept-Ranges: bytes
#缓存时间可以是年(y)、天(d)、时(h),缓存对象可以是jpg、jpeg、png、jss、css等静态文件
#也可以根据目录来设置缓存(expires功能)
location ~^/(images|javascript|Js/css/flash/media/static)/{
expires 360d;
}
#单个文件设置过效期
location ~(daniel.txt) {
log_not_found off;
expires 7d;
break;
}
#设置过期时间并不记录404错误日志
3、压缩优化
当用户请求一个视频的时候,服务器如果返回整个视频给用户的话就会导致流量占用过大、传输变慢的情况,如果先压缩(gzip)一下再传就好得多了,用户收到后(在浏览器端),就会解压,然后看到了视频。压缩的好处可以降低带宽,提升访问速度
#此模块类似apache的mod_deflate压缩功能,nginx的是ngx_http_gzip_module默认已安装
#压缩配置
gizp on; #开启
gzip_min_length 1k; #设置允许压缩的页面最小字节数,页面字节数header头的Content-length中获取。默认是0,不管多大都进行压缩。建议设置成大于1k。如果小于1k可能会越压越大
gzip_buffers 4 16k; #压缩缓冲区大小。表示申请四个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
gzip_http_version 1.0; #压缩版本(默认为1.1,前端为squid2.5时使用1.0)用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。
gzip_comp_level 2; #压缩比率。用来指定gzip压缩比,1压缩比最小,处理速度最快,9压缩比最大,传输速度快,处理最慢,也比较消耗cpu资源
gzip_types text/plain application/x-javascript text/css application.xml; #用来指定压缩的类型,“text/html”类型总是会被压缩
gzip_vary on;
vary header支持。该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如Squid缓存经过nginx压缩的数据。
#压缩配置可以放在http,localtion,server里
#实战配置
server{
listen 80;
server_name www.daniel.org daniel.org;
error_log /var/log/nginx/daniel/daniel_error.log;
access_log /var/log/nginx/daniel/daniel_access.log;
location / {
root /var/www/html/www;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/lcoal/nginx/html;
}
location ~.*\.(gif|jpg|jpeg|png|bmp|swf|js|xml)$
{
root /var/www/html/www;
expires 3650d;
}
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application.xml;
gzip_vary on;
}#新建一个xml和js文件大于1k就行,然后我们curl一下查看
[root@localhost nginx]# curl -I daniel.org/4.js
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Tue, 30 Jan 2018 07:22:17 GMT
Content-Type: application/javascript
Content-Length: 392143
Last-Modified: Tue, 30 Jan 2018 07:09:02 GMT
Connection: keep-alive
ETag: "5a701a0e-5fbcf"
Expires: Fri, 28 Jan 2028 07:22:17 GMT #
Cache-Control: max-age=315360000
Accept-Ranges: bytes
#压缩对象:
1.大于1k的纯文本文件,图片、视频等不要压缩,因为不但不会减小,在压缩时消耗cpu,mem资源
Nginx错误页面的显示配置
#当用户访问的时候会出现一些错误,比如403,404,我们可以指定当这些错误出现时跳转到指定页面
erver{
listen 80;
server_name www.daniel.org daniel.org;
error_log /var/log/nginx/daniel/daniel_error.log;
access_log /var/log/nginx/daniel/daniel_access.log;
location / {
root /var/www/html/www;
index index.html index.htm;
error_page 403 /403.html; #匹配错误并指定跳转页面 #/403.html只是相对路径,相对于上面的root /var/www/html/www
location = /403.html { #匹配页面,跳转到指定页面,这里是403.html
root /var/www/html/error/;
index 403.html;
}
}
location ~.*\.(gif|jpg|jpeg|png|bmp|swf|js|xml)$
{
root /var/www/html/www;
expires 3650d;
}
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application.xml;
gzip_vary on;
}
#404跳转
#404跳转比较特殊,必须要加fastcgi_intercept_errors on,自定义的404页面必须大于512节,否则可能会出现IE默认的404页面
error_page 404 /404.html;
fastcgi_intercept_errors on;
location = /404.html{
root /var/www/html/error;
index 404.html;
}