Nginx笔记
Nginx:反向代理服务器,反向代理,负载均衡,支持高并发, 缺点:只能用于静态页面,不能编译java代码,如用jsp需要请求Tomcat,和Tomcat关联。 Nginx客户端不去请求真正的服务器,而是请求Nginx服务器并代理请求,通过一定概率保定均匀的分发给服务器。 Nginx依赖于底层的Liunx系统. Nginx默认端口是80 Nginx的开发学习模块 配置Nginx集群 vi /etc/nginx/nginx.conf upstream 集群名称:tomcat{ server 192.168.21.140:8080 权重:weight=1; server 192.168.21.144:8080 权重:weight=3; } nginx - tc /etc/nginx/nginx.conf 测试是否成功 /etc/nginx/conf.d/default.conf->proxy_pass http://tomcat要代理的路径 cd default.conf nginx -s reload -c /etc/nginx/nginx.conf 重新加载nginx服务器 shutdown.sh停止服务器 Nginx使用原因 原因一.IO多路复用 什么是IO多路复用? 多个描述符的IO操作都能在一个线程内并发交替地顺序完成,这就是IO多路复用,这里的“复用”指的 是 复用同一个线程。 IO多路复用的实现方式select poll epoll。 select不断遍历效率低下有限制。 epoll效率比select高没有限制。 原因二.轻量级 功能模块少:只保留了核心模块的代码 代码模块化:易读,二次改进 原因三.CPU亲和(affinity) 是一种把CPU核心的Nginx工作进程绑定方式,把每个worker进程固定在一个CPU上执行, 减少切换CPU的cache miss,获得更好的性能。 原因四:采用sendfile sendfile处理静态文件有优势 把所有的文件传输指通过内核空间传递给Socket响应给用户 一.Nginx快速搭建与基本参数使用 Mainline version 开发版 Stable version 稳定版 Legacy version 历史版本 Nginx的安装步骤: 复制yum源 ls vim /etc/yum vim /etc/yum.repos.d/ vim /etc/yum.repos.d/nginx.repo 把替换掉之前的 修改centos/7版本 保存 yum list |grep nginx 显示一下 yum install nginx 快速安装 ng nginx -v 查看版本 nginx -V 查看参数 -------------------------------- 二.基本参数使用 1.安装目录 rpm -q| nginx 安装目录 rpm -ql nginx 登录服务器 /etc/logrotate.d/nginx 日志切割 /etc/nginx/nginx.conf 主要配置文件,启动会读 /etc/nginx/conf.d/default.conf 安装会默认server加载的配置 /etc/nginx/fastcgi_params /etc/nginx/uwsgi_params cig和fastcgi相关配置 /etc/nginx/scgi_params /etc/nginx/mime.types Nginx安装模块 /usr/lib64/nginx/modules /etc/nginx/modules Nginx的命令 /usr/sbin/nginx 服务启动和关闭 /usr/sbin/nginx-debug 调试分析 /usr/share/man/man8/nginx.8.gz 帮助文档 /var/cache/nginx Nginx的缓存目录,Nginx除了做http代理服务,也可以做缓存服务!!! /var/log/nginx Nginx的日志目录 2.安装编译参数 3.Nginx基本配置语法 vi nginx.conf Nginx主目录 cd /etc/nginx/conf.d/ vi default.conf 一个server可以有多个location location / { root /usr/share/nginx/html; 请求的路径 index index.html index.htm; 默认访问的页面 } systemctl restart nginx.service systemctl reload nginx.service重启Nginx服务 1.HTTP请求 curl http://www.imooc.com curl -v http://www.imooc.com > /dev/null 查看被隐藏request和response的内容 2.Nginx日志类型 包括:error.log access_log 依赖于log_format的配置,log_format有一些变量组成 /etc/nginx/nginx.conf tail -f /var/log/nginx/error.lof tail -n 200 /var/log/nginx/access.log 3.Nginx变量 HTTP请求变量 arg_PAREMETER,http_HEADER,sent_http_HEADER 内置变量 Nginx内置的如:$remote_addr ...等 自定义变量 4.Nginx模块 官方模块: Nginx的客户端状态模块, 如:location /mystatus { stub_status; } 目录中选中一个随机页面:location /{ root /opt/app/code; random_index on; #index index.html index.htm; } HTTP内容替换如:location / { root /opt/app/code; index index.html index.htm; sub_filter'<a>imooc'要替换的 '<a>IMOOC'替换后的; sub_filter_once off;替换所有叫imooc } 注在/etc/nginx/conf.d/default.conf配置! 保存 模块配置完后检查语法是否正确:nginx -t -c /etc/nginx/nginx.conf 重新加载:nginx -s reload -c /etc/nginx/nginx.conf ip a/ifconfig 查看ip地址,复制到浏览器 如116.65.103.228//mystatus。 第三方模块 5.Nginx的请求限制 TCP连接在http请求之上,通过FIN和ACK保持连接的状态。 HTTP请求建立在一次TCP连接基础上。 一次TCP请求至少产生一次HTTP请求。 连接频率限制 语法: Syntax:limit_conn_zone key zone=name:size; Default:- Context:http Syntax:limit_conn zone number; Default:- Context:http,server,location 请求频率限制 语法: Syntax:limit_req_zone key zone=name:size rate=rate; Default:- Context:http Syntax:limit_req zone=name [burst=number][nodelay]; Default:- Context:http,server,location 模块配置完后检查语法是否正确:nginx -t -c /etc/nginx/nginx.conf 重新加载:nginx -s reload -c /etc/nginx/nginx.conf 压力测试工具测试请求和连接:ab -n 40 -c 20 http://本地ip地址/1.html 注:在default.conf里写,上面的key写的是$binary_remtoe_addr:表示客户端的地址, 6.Nginx的访问控制 ip138查询自己的公网ip 1.IP的访问控制:http_access_module 语法:location ~ ^/admin.html{ root /opt/app/code; allow 222.128.189.0/24; 只允许该id访问 /24是ip段 deny all; 不允许所有 index index.html index.htm; } http_access_module局限性解决方式: 1.geo模块,2.通过HTTP自定义变量传递,3.http_x_forward_for,该方式客户端可以改写,不安全 2.用户的信任登录: http_auth_basic_module rpm -qf /usr/bin/htpasswd yum install httpd-tools -y htpasswd -c ./auth_mod^C cd .. htpasswd -c ./auth_conf jeson cd conf.d/ vi /auth_mod.conf location /admin.html{ root /opt/app/code; auth_basic "Auth access test!"; auth_basic_user_file /etc/nginx/auth_conf; index inex.html index.htm; } 模块配置完后检查语法是否正确:nginx -t -c /etc/nginx/nginx.conf 重新加载:nginx -s reload -c /etc/nginx/nginx.conf 这时访问页面!!! http_auth_basic_module局限性解决方式: 1.Nginx结合LUA实现高效验证 2.Nginx和LDAP打通,利用nginx-auth-ldap模块 进阶学习 一.静态资源WEB服务 简单可分两类静态请求和动态请求: 1.服务端动态请求需要经过服务端的解释器进行一些比较复杂的逻辑运算,然后那对应的数据进行指示性的封装,返回给用户 2.静态请求恰恰相反,像一些TXT文件,FLV/MPEG视频,PNG/GIF图片,HTML/CSS/JS浏览器端渲染,都是静态资源 静态资源服务场景CDN:传输延迟最小化,分发网络技术 3.文件读取 Syntax:sendfile on|off; Default:sendfile off; Context:http,server,location,if in location 引读:-with-file-aio异步文件读取 4.配置语法-tcp_noputh Syntax:tcp_nopush no|off; Default:tcp_nopush off; Context:http,server,location 作用:sendfile开启的情况下,提高网络包的传输效率 5.配置语法-tcp_nodelay Syntax:tcp_nodelay no|off; Default:tcp_nodelay no; Context:http,server,location 作用:keepalive连接下,提高网络包的传输实时性 6.配置语法-压缩 Syntax:gzip on|off; Default:gzip off; Context:http,server,location,if in location 作用:压缩传输 Syntax:gzip_comp_level level; Default:gzip_comp_level 1; Context:http,server,location 作用:压缩比例 7.扩展Nginx压缩模块 http_gzip_static_module-预读gzip功能 http_gunzip_module-应该支持gunzip的压缩方式 在vi /etc/nginx/conf.d/static_server.conf下配置压缩语法 浏览器缓存 HTTP协议定义的缓存机制 如:Expires;Cache-controll等 效验过期机制 从Cache-control(max-age)里检查声明周期是否到期 客户端添加Cache-Control,Expires验证是否过期语法: Syntax:expires [modified] time; expires epoch | max | off; Default:expires off; Context:http,server,location,if in location 注:Cache-Control是浏览器返回的。 跨域访问 浏览器默认禁止跨域访问 配置语法: Syntax:add_header name value [always]; Default:-; Context:http,server,location,if location 注:浏览器会判断头信息HTTPResponse里边Access-Control-Allow-Origirn,判断服务端是否允许访问 实际写法如:add_header Access-Control-Allow-Origin http://www.jesonc.com 或加*意思允许所有站点访问; add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS; 把浏览器中Disable cache选中,作用清理客户端浏览器缓存,以防缓存影响开发和调试。 #号作用注释, 防盗链 目的:防止资源被盗用。 区别哪些请求是非正常的用户请求 http_refer防盗链配置模块: location / { valid_referers none blocked 116.62.103.228;注:也可以使用匹配的写法如:~/google\./; 依次意思:允许哪些refer访问,表示那些没有带refer,refer不是标准的http://协议这种方式进来的,表示要访问的ip if($invalid_referer){//判断是否为1,如是1 返回403 return 403; } } curl -I http://116.62.103.228/wei.png作用:通过命令请求头信息 curl -I "http://www.baidu.com" -I http://116.62.103.228/wei.png:像访问百度的有设防盗链会返回403 二.代理服务 Http Http server ICMP/POP/IMAP ->Nginx-> Mail server HTTPS Http server RTMp media server 区别在于代理的对象不一样 正向代理代理的对象是客户端 反向代理代理的对象是服务端 配置语法: Syntax:proxy_pass URL; Default:-; Context:http,server,location,limit_except 所支持的协议: http://localhost:8080/uri/ https://192.168.1.1:8080/uri/ http://unix:/tmp/backend.socket:/uri/; 反向代理使用方式 proxy_pass http://127.0.0.1:8080; 查看本机因为Nginx所启用的端口:netstat -luntp|grep nginx 正向代理使用方式 location / { if($http_x_forwarded_for !~* "^116\.62\.103\.228"){ return 403; } } 缓冲区语法: Syntax:proxy_buffering no | off; Default:proxy_buffering on; Context:http,server,location; 扩展:proxy_buffer_size,proxy_buffers,proxy_busy_buffers_size 减少了io的损耗 跳转重定向语法: Syntax:proxy_redirect default; proxy_redirect off; proxy_redirect redirect replacement; Default:proxy_redirect default; Context:http,server,location; 头信息语法: Syntax:proxy_set_header field value; Default:proxy_set_header Host $proxy_host; Context:http,server,location; 扩展:proxy_hide_header,proxy_set_body 超时语法: Syntax:proxy_connect_timeout time; Default:proxy_connect_timeout 60s; Context:http,server,location; Nginx作为代理到后端服务器中间的一个连接超时 nginx -V查看缓冲区临时文件存放位置 三.负载均衡调度器SLB GSLB全局性负载均衡 SLB局部负载均衡 Nginx就是典型的七层负载均衡SLB 分为四层负载均衡和七层负载均衡 四层负载均衡:性能块,只需要底层进行应用处理,进行包转发。 七层负载均衡:应用层,http信息的改写, 配置语法: Syntax: upstream name{} Default:- Context:http upstream举例 upstream 集群名称:tomcat{ server 192.168.21.140:8080 权重:weight=1; server 192.168.21.144:8080 权重:weight=3; } 记得在哪有引用这个集群名称 后端服务器在负载均衡调度中的状态 down -> 当前的server暂时不参与负载均衡 backup -> 预留的备份服务器 max_fails -> 允许请求失败的次数 fail_timeout -> 经过max_fails失败后 max_conns -> 限制最大的接收的连接 关闭端口号:iptables -I INPUT -p tcp --dport 8003 -j DROP 调度算法 论询 -> 按时间顺序逐一分派到不同的后端服务器 加权轮询 -> weight值越大,分配到的访问几率越高 ip_hash -> 每个请求按访问ip的hash结果分配,这样来自同一个ip固定访问一个后端服务器 least_conn -> 最少链接数,那个机器连接数少就分发 注:这个和加权轮询差不多 url_hash -> 按照访问的url的hash结果来分配请求,是每个url定向到同一个后端服务器 hash关键数值 -> hash自定义的key url_hash: Syntax:hash key [consistent]; Default:- Context:upstream This directive appeared in version 1.7.2. 编写实例:hash $request_uri; 四.动态缓存 proxy_cache配置语法: Syntax:proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time]; Default:- Context:http Syntax:proxy_cache zone | off; Default:proxy_cache off; Context:http,server,location 缓存过期周期配置 Syntax:proxy_cache_valid [code ...] time; Default:- Context:http,server,location 缓存的维度配置 Syntax:proxy_cache_key string; Dafault:proxy_cache_key $scheme$proxy_host$request_uri; Context:http,server,location 如何清理指定缓存? 1.rm -rf缓存目录内容 2.第三方扩展模块ngx_cache_purge指定缓存 如何让部分页面不缓存? if($request_uri ~ ^/(url3|login|register|password\/reset)){ set $cookie_nocache 1; } Syntax:proxy_no_cache string ...; Default:- Context:http,server,location 大文件分片请求 Syntax:slice size; Default:slice 0; Context:http,server,location 前端请求过来通过分片 优势: 每个子请求收到的数据都会形成一个独立文件,一个请求断了,其它请求不受影响。 缺点: 当文件很大或slice很小的时候,可能会导致文件描述符耗尽等情况。 深度学习 一.动静分离 通过中间件将动态请求和静态请求分离。 对服务端而言减少不必要请求的消耗,不需要经过后端cup进行逻辑运算 对客户端而言不用经过后端,从而减少请求的延时 Nginx的rewrite规则 实现url重新以及重定向 URL访问跳转,支持开发设计 SEO优化 维护:后台维护,流量转发等。 安全。 配置语法: Syntax:rewrite regex replacement[flag]; Defaule:- Context:server,location,if rewrite ^(.*)$ /pages/maintain.html break; 正则表达式 . -> 匹配除换行符以外的任意字符 ? -> 重复0次或1次 + -> 重复1次或更多次 * -> 最少链接数,那个机器连接数少就分发 /d -> 匹配数字 ^ -> 匹配字符串的开始 $ -> 匹配字符串的介绍 {n} -> 重复n次 {n,} -> 重复n次或更多次 [c] -> 匹配单个字符c [a-z] -> 匹配a-z小写字母的任意一个 \ -> 转义字符 rewrite index\.jsp$ /pages/maintain.html break; () -> 匹配括号之间的内容 flag标记: last -> 停止rewrite检测 break -> 停止rewrite检测 redirect -> 返回302临时重定向,地址栏会显示跳转后的地址 permanent-> 返回301永久重定向,地址栏会显示跳转后的地址 实际写法: location ~ ^/break{ rewrite ^/break /test /break; 注:break找不到并不会新建请求 } location ~ ^/last{ rewrite ^/last /test /last; 注:last找不到test,会新建请求 } location ~ ^/imooc{ rewrite ^/imooc http://www.imooc.com/ permanent; #rewrite ^/imooc http://www.imooc.com/ redirect; } rewrite ^/course-(\d+)-(\d+)-(\d+)\.html$ /course/$1/&2/course_$3/html break; if($http_user_agent ~* Chrome){ rewrite ^/nginx http://coding.imooc.com/class/121.html redirect; } if(!-f $request_filename){ !-f判断文件不存在 rewrite ^/(.*)$ http://www.baidu.com/$1 redirect; } rewrite优先级规则 执行server块的rewrite指令 执行location匹配 执行选定的location中的rewrite rewrite优雅的书写规则 二.Nginx高级模块 1.secure_link_module安全连接模块 语法: Syntax:secure_link expression; Default:- Context:http,server,location Syntax:secure_link_md5 expression; Default:- Context:http,server,location 作用:应用场景访问限制,防盗链。 2.geoip_module模块 yum install nginx-module-geoip geoip_country /etc/nginx/geoip/GeoIP.dat; geoip_city /etc/nginx/geoip/GeoLiteCity.dat; location /myip{ default_type text/plain; return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city"; } 作用ip地址匹配MaxMind GeoIP二进制文件,读取IP所以在地域信息。 区别,国内外,国内城市,地域作HTTP访问规则 为什么需要HTTPS? HTTP不安全,传输数据被中间人盗用信息泄露,数据内容劫持篡改。 HTTPS对传输内容进行加密及身份验证 对称加密特点是:加密密钥和解密密钥是一样的 一串密钥。 非对称加密特点是:加密密钥和解密密钥是不一样的 两串密钥。 生产密钥和CA证书 必须安装好#openss|version来生成密钥, 通过密钥生成'证书签名请求文件csr',密钥和csr一并打包以及发送对应的签名机构,CA证书签名, 步骤一.生成key密钥 步骤二.生成证书签名请求文件(csr文件) 步骤三.生成证书签名文件(CA文件) 实际操作如下: rpm -qa|grep open mkdir ssl_key openssl genrsa -idea -out jesonc.key 1024 openssl req -new -key jesonc.key -out jesonc.csr 生成证书签名请求文件,注意:这是自己签名的 openssl x509 -req -days 3650 -in jesonc.csr -signkey jesonc.key -out jesonc.crt 二.Nginx与Lua开发 Lua:是一个简洁,轻量,可扩展的脚本语言 Nginx结合Lua优势 充分的结合Nginx的并发处理epoll优势和Lua的轻量 实现简单的功能,提高高并发的场景 Lua基础语法 1.安装lua:yum install lua 2.运行:交互式运行和脚本文件方式运行 3.注释:--行注释,--[[块注释]] 4.变量:a='alo\n123"' a="alo\n123"" a='\97lo\10\04923"' a=[[alo123]] 布尔类型只有nil和false是false,0和空字符串是true 5.while循环语句 sum=0 num=1 while num <=100 do sum = sum+num num = num+1 end print("sum=",sum) 注:Lua没有++或者+=这样的操作 6.for循环语法 sum = 0; for i=1,100 do sum = sum+i end 7.if-else判断语句 if age == 40 and sex == "Male" then print("大于40男人") elseif age > 60 and sex ~= "Female" then print("非女人而且大于60"); else local age = io.read() print("Your age is "..age) end 注:~=是不等于,..是字符串的拼接操作符,io库的分别从stdin和stdout读写的read和write函数 Nginx+Lua环境 1.LuaJIT 2.ngx_devel_kit和lua-nginx-module 3.重新编译Nginx http://www.imooc.com/article/19598:老师写的参考笔记 Nginx调用lua模块指令 Nginx的可插拔模块化加载执行,共11个处理阶段 set_by_lua -> 设置nginx变量,可以实现复杂的逻辑处理 set_by_lua_file access_by_lua -> 请求访问阶段处理,用于访问控制 access_by_lua_file content_by_lua -> 内容处理器,接受请求处理,并输出响应 content_by_lua_file Nginx Lua API ngx.var -> nginx变量 ngx.req.get_headers -> 获取请求头 ngx.req.get_uri_args-> 获取url请求参数 ngx.redirect -> 重定向 ngx.print -> 输出响应内容体 ngx.say -> 通ngx.print,但是会最后输出一个换行符 ngx.header -> 输出响应头 Nginx接口Lua实现代码的灰度发布 按照一定关系区别,分部分的代码进行上线,使代码的发布能平滑过渡上线。 场景:1.用户的信息cookie等信息区别 2.根据用户的ip地址 3.效验IP Memcache 实战:1.yum install memcached 和 tomcat 2.更改了tomcat的端口,tomcat/conf/server.xml 3.netstat -luntp查看系统所有启动的端口 4.启动memcached:1.ps -aux|grep mem 2.memcached -p11211 -u nobody -d 5.netstat -luntp|grep 11211 6.1.ls 2.cd /etc/nginx/conf.d/ 7.vi dep.conf 8.vi /opt/app/lua/dep.lua 加一个模块安装:cat install_memcache_lua.sh 操作memcache如下 有后台的情况下:ps -aux|grep mem 没后台的情况下:telnet 127.0.0.1 11211 set 如这个ip:103.215.191.72 0 1 1 STORED 存入成功 get 如这个ip:103.215.191.72 架构篇:性能的优化,以及安全的章节 一.Nginx常见问题 1.相同server_name多个虚拟主机访问优先级 diff test_server1.conf test_server2.conf:查看多个虚拟主机区别命令 按左右位置读取 2.location匹配优先级 = -> 进行普通字符精确匹配,也就是完全匹配 ^~ -> 表示普通字符匹配,使用前缀匹配 ~\~* -> 表示执行一个正则匹配() 3.try_files使用 作用:按顺序检查文件是否存在 语法:location / { try_files $uri $uri/ /index.php; } ps -aux|grep java: 实写如下: location / { root /opt/app/code/cache;这是他讲课的安装目录,如usr/local try_files $uri @java_page; } location @java_page{ proxy_pass http://127.0.01:9090; } 场景:可用于缓存和动静分离 4.Nginx的alias和root区别 location /request_path/image/ { root /local_path/image/; } http://www.imooc.com/request_path/image/cat.png /local_path/image/request_path/image/cat.png location /request_path/image/ { alias /local_path/image/; } http://www.imooc.com/request_path/image/cat.png /local_path/image/cat.png 5.用什么方法传递用户的真实IP set x_real_ip=$remote_addr $x_real_ip=IP1 6.常见错误 Nginx:413 Request Entity Too Large 1.用户上传文件限制 client_max_body_size 502 bad gateway 2.后端服务无响应 504 Gateway Time-out 3.后端服务执行超时,默认是60秒 http常见的错误码:403访问被起绝,404文件没找到,400请求参数错误 二.Nginx性能优化 1.性能优化考虑点 1.当前系统结构瓶颈 观察指标,压力测试 2.了解业务模式 接口业务类型,系统层次结构 3.性能与安全 权衡好对应的点 2.接口压力测试工具 1.安装:yum install httpd-tools 2.使用:ab -n 2000 -c 2 http://l27.0.0.1/ -n总的请求数 -c并发数 -k是否开启长连接 3.演示ab的使用和Nginx对于后台服务的性能压测 ab -n 2000 -c 2 http://l27.0.0.1/jesonc.html 查看压测后的参数 netstat -luntp|grep java:查看java启动的端口 3.系统与Nginx性能优化 1.网络 2.系统 3.服务 4.程序 5.数据库,底层服务 文件句柄:linux/Uxin 一切接文件,文件句柄就是一个索引,默认操作系统设置一般为1024 设置方式:系统全局性修改,用户局部性修改,进程局部性修改 vi /etc/security/limits.conf:系统全局性,用户局部性,修改文件句柄的地方 尤其其实是新装的系统需设置 vi /etc/nginx/nginx.conf:进程局部性修改文件句柄的地方 CPU的亲和:把进程通常不会在处理器之间频繁迁移的频率小,减少性能损耗。 cat /proc/cpuinfo|grep "physical id"|sort|uniq|wc -l 查看有多少个物理CPU cat /proc/cpuinfo|grep "cores"|uniq 查看有多少核心 top进去按键盘1键展示出当前的数量 核心就是cpu亲缘 把Nginx的work进程对应的绑到不同的cpu上 vi /etc/nginx/nginx.conf worker_processes 2;:表示当前启动了多少个进程,官方建议启动进程最好和cpu进程一致 worker_cpu_affinity:配置cpu亲缘,3中绑定方式,常用的是:worker_cpu_affinity auto; ps -eo pid,args,psr | grep [n]ginx:看一下当前nginx所使用的cpu是哪一个 events{事件处理器 use epoll; worker_connections 1024;限制每一个wrok能够处理多少个连接 } 关闭不常用的日志 gzip_disable "MSIE [1-6]\.";对IE6一下,不进行压缩。 三.Nginx的安全篇 1.常见的恶意行为 爬虫行为和恶意抓取,资源盗用 基础防盗链功能-目的不让恶意用户能轻易的爬取网站对外数据 secure_link_module-对数据安全性提高加密验证和失败性,适合如核心重要数据 access_module-对后台,部分用户服务的数据提供IP防控 2.常见的应用层攻击手段 后台密码撞库-通过猜测密码字典不断对后台系统登录性尝试,获取后台登陆密码 方法一.后台登陆密码复杂度 方法二.access_module对后台提供IP防控 方法三.预警机制 文件上传漏洞-利用这些可以上传的接口将恶意代码植入到服务器中,在通过url去访问以执行代码 http://www.imooc.com/upload/1.jpg/1.php Nginx将1.jpg作为php代码执行 location ^~ /upload{ root /opt/app/images; if($request_filename ~* (.*)\.php){ return 403; } } SQL注入-利用为过滤/未审核用户输入的攻击方法,让应用运行本不应该运行的SQL代码 SQL注入场景 ' or 1=1# select * from user where username=" or 1=1#" and password="asdf" 3.场景:Nginx+LUA构建waf防火墙 拦截Cookie类型攻击 JAVA 拦截异常post请求 ->Nginx+LUA(waf)拦截cc攻击 -> PHP 拦截URL 拦截arg Python 安装git命令:yum install git^C git clone https://github.com/loveshell/ngx_lua_waf.git cd ng cd ngx_lua_waf/ cd /etc/nginx/ mv /opt/download/ mv /opt/download/ng mv /opt/download/ngx_lua_waf/ mv /opt/download/ngx_lua_waf/ ./ mv /opt/download/ngx_lua_waf/ ./waf/ cd ./w cd ./waf/ vi config.lua 4.Nginx漏洞和新版本特性 1.查看版本更新描述 2.CVE-2017-7529:信息泄露漏洞 四.基于Nginx的中间价架构 Nginx的配置与使用经验 1.静态资源服务 2.代理服务 3.动静分离 4.负载均衡 5.Nginx在不同角色中这几的功能 6.浏览器需不需要设置缓存,缓存周期 7.对于静态资源防盗链是比不可少的,对那些资源设置防盗链 8.流量的设置,要不要考虑对应的一些资源按照请求类型进行流量限制 9.静态资源的压缩,如果比例压缩的合适,能大大节省服务端的性能流量io的消耗, 什么样的方式压缩,采用什么样的压缩比例,哪所的类型。 设计评估 1.硬件: CPU 内存 硬盘 相应的配置如:动态的数据缓存以及要承受一定并发 2.系统: 用户权限 日志目录存放 3.关联服务: LVS,keepalive 运用于负载均衡 syslog 用于Nginx日志实时同步 Fastcgi 性能调优安全 配置注意事项 1.合理配置 2.了解原理 3.关注日志 BTuC商对客 数据分析,代理均衡,