常见问题:
相同server_name多个虚拟主机优先级访问
优先使用最先读取到的配置。
location匹配优先级
= 进行普通字符精确匹配 #找到后不会再往下匹配
^~ 表示普通字符匹配,使用前缀匹配 #下同,匹配到后,还会继续寻找,是否有匹配度更高的
~、~* 表示执行一个正则匹配() # ~*不区分大小写,~区分
try_file的使用:
按顺序检查文件是否存在,如存在返回文件内容,不存在根据路径对应规则
alias和root的区别:
用什么样的方式传递用户的真实IP:
假设用户经过多重代理访问
虽然X-Forwarded-For可以定位,当有可能会被篡改,所以最应该和常用的方式是和第一层代理取得联系,加上用户的IP信息,set x_real_ip=$remote_addr
Nginx常见错误码:
413 Request Entity Too Large #用户请求的文件太大
对用户上传分级限制 修改client_max_body_size
502 bad gatewag
后端服务无响应
504 GateWay Time-out
后端服务执行超时
Nginx性能优化:
考虑点:
1、当前系统结构瓶颈:观测指标、压力测试
2、了解业务模式:接口业务类型、系统层次化结构
3、性能与安全
压测工具ab:
实例:
ab -n 2000 -c 2 http://127.0.0.1/
-n 总的请求数
-c 并发数
-k 是否开启长连接
系统与Nginx性能优化点:网络、系统、服务、程序、数据库、底层服务
文件句柄:
linux\uinx中一切皆文件,文件句柄就是一个索引,linux默认不会让你无限制地打开文件,默认为1024个
设置方式:
系统全局性修改、用户局部性修改、进程局部性修改(vim /etc/security/limits/conf)
CPU亲和配置:
方式一:
worker_processes 4;#nginx进程数,一般和物理CPU核心数相同,这里举例为4;
worker_cpu_affinity 0001 0010 0100 1000;#5的话则为00001…依次类推
方式二:
worker_processes 2;
worker_cpu_affinity:1010 0101;
比较少用
方式三:
worker_cpu_affinity auto;(1.9版本后出现)
使用ps -en pid,args,psr |grep ngxin命令查看nginx进程分别使用的哪个CPU
nginx通用配置优化:
error_log 日志级别 warn;
pid Nginx 管理启动寻找的pid文件
worker_rlimit_nofile ;一般小站点设置为10000以上,
events{
use epoll; #linux2.6内核后使用epoll
worker_connections 10240; #限制每个work进程的最大连接数
}
http域优化:
charset utf-8; #设置文件编码
access_log 如果要跑关闭的话,建议关闭到sever级
sendfile on;
#tcp_nopush on; #根据实际情况打开
#tcp_nodent on; #根据实际情况打开
keepalive_timeout 65;
gzip on;
gzip_disable "MSIE [1~6]\";# IE1~6的版本不压缩
gzip_http_version 1.1;
Nginx架构安全篇:
由于学习的Nginx,所以不从代码程序或者其他层面探讨防范方式。
常见的恶意行为:
爬虫行为和恶意抓取、资源盗用
基础防盗链功能-目的不让恶意用户能轻易地爬取网站对外数据
secure_link_module-对数据安全性提高加密验证和时效性,适合如核心重要数据
access_module-对后台、部分用户服务的数据提供IP防控
也可使用refer做一般性地防范。
常见的应用层攻击手段:
后台密码撞库:通过猜测密码字典不断对后台系统登陆性尝试,获取后台登陆密码
方法一:后台登陆密码复杂度
方法二:access_module 对后台提供IP防控
方法三:预警机制
文件上传漏洞:
利用这些可以上传的接口将恶意代码植入到服务器中,再通过url去访问执行代码
防范方式举例:
location ^~ /upload{
root /opt/app/images;
if($request_filename ~* (.*)\.php){
return 403;
}
SQL注入:
利用未过滤/未审核用户输入的攻击方法,让应用运行本不应该运行的SQL代码;
使用lua防范
Nginx防攻击政策:
场景:Nginx+LUA的安全waf防火墙:
详见github地址:https://github.com/loveshell/ngx_lua_waf
CC攻击防范:使用AB等工具多次请求。
基于Nginx中间件架构原则:
了解需求
定义Nginx在服务体系中的角色(静态资源服务,代理服务,动静分离)
静态资源服务:类型分类(视频、图片等目录分类),浏览器缓存(是否需要,缓存周期)、防盗链、流量限制(如APP升级时,一下字资源占用满),防资源盗用(安全连接,相应的验证,时效性),压缩(压缩模式,类型,比率等)
代理服务:
协议类型(HTTP,STMP,WEBSOCKET等),正向代理,反向代理,负载均衡,代理缓存,头信息处理、LNMP,分片请求,poxypass等
设计评估考虑点
作为代理服务的时候,要考虑硬件(CPU、内存、硬盘)
系统(用户权限,日志目录存放)
关联服务 LVS,keepalive,syslog,Fastcgi
配置注意事项
合理配置(http,server域),了解原理(HTTP协议原理,状态原理,操作系统原理等),关注日志