12 配置Nginx gzip压缩实现性能优化

100k ---- 1s 90k

100k ---- 5s 10k

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_http_version 1.1;

gzip_comp_level 7;

gzip_types text/css text/xml application/javascripts;

gzip_vary on;

Syntax: gzip_buffers number size;

Default:

gzip_buffers 32 4k|16 8k;

Context: http, server, location

Syntax: gzip_comp_level level;

Default:

gzip_comp_level 1;

Context: http, server, location

Syntax: gzip_types mime-type ...;

Default:

gzip_types text/html;

Context: http, server, location

Syntax: gzip_vary on | off;

Default:

gzip_vary off;

Context: http, server, location

Syntax: gzip_min_length length;

Default:

gzip_min_length 20;

Context: http, server, location

Syntax: gzip_http_version 1.0 | 1.1;

Default:

gzip_http_version 1.1;

Context: http, server, location


13 配置Nginx expires实现让客户端缓存数据

范例1:将网站的所有图片进行缓存 location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ oldboy.jpg { expires 30d; }

范例2:将网站程序代码文件在本地进行缓存 location ~ .*.(js|css)$ { expires 30d; } 注意事项:

  1. 进行缓存的时间要设置合理
  2. 不是所有请求的数据信息都可以进行缓存

14 Nginx日志相关优化与安全

1)要将web服务日志信息进行切割处理 2)不记录不需要的访问日志 location ~ .*.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$ { access_log off; } 3)对重要日志信息进行授权 chown -R root.root /app/logs chmod -R 700 /app/logs 4)进行日志清理 编写脚本自动化清除日志


15 Nginx站点目录及文件URL访问控制

公司会搭建内部网站平台,只想让公司内部人员进行查看 范例1:配置Nginx,禁止解析指定目录下的指定程序。 location ~ ^/images/..(php|php5|sh|pl|py|html)$ { allow 10.0.0.0/24; deny 10.0.0.0/24; } location ~ ^/static/..(php|php5|sh|pl|py)$ { deny all; } location ~* ^/data/(attachment|avatar)/.*.(php|php5)$ { deny all; } 范例1:配置禁止访问指定的单个或多个目录。 禁止访问单个目录的命令如下: location ~ ^/(static)/ { deny all; } location ~ ^/static { deny all; }


16 配置Nginx,禁止非法域名解析访问企业网站 方法1:让使用IP访问网站的用户,或者恶意解析域名的用户,收到501错误,命令如下: server { listen 80; server_name _; return 501; }

方法2:通过301跳转到主页,命令如下: server { listen 80; server_name _; rewrite ^(.*) http://blog.etiantian.org/$1 permanent; }

方法3:发现某域名恶意解析到公司的服务器IP,在server标签里添加以下代码即可,若有多个server则要多处添加。 if ($host !~ ^www.oldboyedu.com$) { rewrite ^(.*) http://blog.etiantian.org/$1 permanent; }


17 Nginx图片及目录防盗链解决方案 模拟实现盗链过程:

  1. 配置盗链网站信息 第一个里程:编写盗链网站配置文件 server { listen 80; server_name www.daolian.org; root html/daolian; index index.html index.htm; }

第二里程:编写盗链网站程序代码 <html> <head> <title>老男孩教育 </title> </head> <body bgcolor=green> whw的博客! <br>我的博客是linux <a href="http://oldboy.blog.51cto.com" target="_blank">博客地址 </a> <img src="http://www.etiantian.org/ mp4/ sdfasdfdsaadsf/10-10/test.mp4"> </body> </html>

  1. 配置被盗链网站信息 在站点目录下,生成要被盗链的图片信息 [root@web01 www]# ll oldboy.jpg -rw-r--r-- 1 root root 71806 3月 9 16:27 oldboy.jpg
  1. 根据HTTP referer实现防盗链 location ~ .*.(jpg|gif|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ { <--- 判断只要用户访问的是图片资源 valid_referers none blocked *.etiantian.org etiantian.org; if ($invalid_referer){ rewrite ^/ http://www.etiantian.org/nolink.png; } }

location ~* ^.+.(gif|jpg|png|swf|flv|rar|zip)$ { <==说明:将盗链提示图片缓存到用户本地 valid_referers none blocked server_names *.etiantian.org etiantian.org; if ($invalid_referer){ rewrite ^/ http://bbs.etiantian.com/img/nolink.jpg; } access_log off; root html/www; expires 1d; break; } } 2) 根据cookie防盗链 3) 通过加密变换访问路径实现防盗链(扩展研究) 研究nginx模块 ngx_http_accesskey_module 4)在产品设计上解决盗链方案 在数据信息上加上水印logo信息


18 Nginx错误页面的优雅显示 ##www server { listen 80; server_name www.etiantian.org; location / { root html/www; index index.html index.htm; } error_page 403 /403.html; #<==当出现403错误时,会跳转到403.html页面 }

范例2:50x页面放到本地单独目录下,进行优雅显示。 error_page 500 502 503 504 /50x.html; location = /50x.html { root /data0/www/html; }

范例3:改变状态码为新的状态码,并显示指定的文件内容,命令如下: error_page 404 =200 /empty.gif; server { listen 80; server_name www.linuxpeixun.com; location / { root /data0/www/bbs; index index.html index.htm; fastcgi_intercept_errors on; error_page 404 =200 /ta.jpg; access_log /app/logs/bbs_access.log commonlog; } }

范例4:错误状态码URL重定向,命令如下: server { listen 80; server_name www.oldboyedu.com; location / { root html/www; index index.html index.htm; error_page 404 http://oldboy.blog.51cto.com; #<==当出现404错误时,会跳转到指定的URL http://oldboy.blog.51cto.com页面显示给用户, 这个URL一般是企业另外的可用地址 access_log /app/logs/bbs_access.log commonlog; } }


19 Nginx站点目录文件及目录权限优化

  1. robots.txt机器人协议介绍(君子协议)

  2. 利用user_agent参数信息进行防爬虫 范例1:阻止下载协议代理,命令如下: if ($http_user_agent ~* LWP::Simple|BBBike|wget) { return 403; }

    if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Yahoo!Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot") { return 403; }


20 利用Nginx限制HTTP的请求方法 #Only allow these request methods if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 501; } #Do not accept DELETE,SEARCH and other methods

if ($request_method ~* ^(GET)$ ){ return 501; }


21 使用普通用户启动Nginx(监牢模式) 第一个里程:把nginx服务重要文件或目录信息放置到普通用户家目录中 [oldboy@web02 ~]$ mkdir {conf,html,logs} [oldboy@web02 ~]$ cp /application/nginx/conf/nginx.conf.default ./conf/ [oldboy@web02 ~]$ cp /application/nginx/conf/mime.types ./conf/ ​ 第二个里程:编写nginx配置文件 [oldboy@web02 ~]$ cat ./conf/nginx.conf worker_processes 1; error_log /home/oldboy/logs/error.log; pid /home/oldboy/logs/nginx.pid;

events { worker_connections 1024; } 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"'; access_log /home/oldboy/logs/web_blog_access.log main; server { listen 80; <-- 对于普通用户是没有资格应用特殊端口 大于1024的端口可以让普通用户管理 server_name www.etiantian.org; location / { root /home/oldboy/html/; index index.html index.htm; } } } 第三个里程:利用普通用启动nginx程序 [oldboy@web02 ~]$ /application/nginx/sbin/nginx -c /home/oldboy/conf/nginx.conf nginx: [alert] could not open error log file: open() "/application/nginx-1.12.2/logs/error.log" failed (13: Permission denied) [oldboy@web02 ~]$ ps -ef|grep nginx oldboy 24337 1 0 19:00 ? 00:00:00 nginx: master process /application/nginx/sbin/nginx -c /home/oldboy/conf/nginx.conf oldboy 24338 24337 0 19:00 ? 00:00:00 nginx: worker process
oldboy 24340 24297 0 19:00 pts/0 00:00:00 grep --color=auto nginx