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'imooc'要替换的 '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 123"' a="alo 123"" a='97lo923"' 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商对客 数据分析,代理均衡,