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; } }
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一下看看 [[email protected] 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错误日志
压缩优化
当用户请求一个视频的时候,服务器如果返回整个视频给用户的话就会导致流量占用过大、传输变慢的情况,如果先压缩(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一下查看 [[email protected] 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; }