摘要:架构篇一常见问题相同多个虚拟主机优先级访问三个配置文件配置上述相同的三个虚拟主机,会先访问,访问的优先级是按照服务器的读取顺序,即文件名的排序。
Nginx-架构篇 一、Nginx常见问题 1. 相同server_name多个虚拟主机优先级访问
# 三个配置文件: # testserver1: server_name testserver1 www.rona1do.top; root /opt/app/code1; # testserver2: server_name testserver2 www.rona1do.top; root /opt/app/code2; # testserver3: server_name testserver3 www.rona1do.top; root /opt/app/code3;
配置上述相同server_name的三个虚拟主机,会先访问testserver1,访问的优先级是按照服务器的读取顺序,即文件名的排序。2. location匹配优先级
=:进行普通字符精确匹配,也就是完全匹配
^~:表示普通字符匹配,使用前缀匹配
~ ~ :表示执行一个正则匹配(加不区分大小写)
上述优先级自上而下优先级降低,前两个匹配是精确匹配,匹配到以后就不再往下找,正则匹配匹配到相应的字符串也会继续往下寻找是否有更精确的匹配。3. Nginx的try_files的使用
按顺序检查文件是否存在
# 先检查对应的url地址下的文件存不存在,如果不存在找/index.php,类似于重定向 location / { try_file $uri /index.php; }4. Nginx的alias和root区别
root
location /request_path/image/ { root /local_path/image/; } # 请求:http://www.rona1do.top/request_path/image/cat.png # 查询: /local_path/image/request_path_image/cat.png
alias
location /request_path/image/ { alias /local_path/image/; } # 请求:http://www.rona1do.top/request_path/image/cat.png # 查询: /local_path/image/cat.png5. 用什么样的方法传递用户的真实IP地址
在有代理的情况下,remote_addr获取的是代理的ip,不是用户的ip
x-forwarded-for容易被篡改
通用解决办法: 可以跟第一级代理协商,设置头信息x_real_ip记录用户的ip6. Nginx中常见错误码
set x_real_ip=$remote_addr
413:request entity too large
用户上传文件限制:client_max_body_size
502:bad gateway
后端服务无响应
504:gateway time-out
后端服务超时
二、Nginx性能优化 1. 性能优化考虑点
当前系统结构瓶颈
观察指标(top查看状态、日志等)、压力测试
了解业务模式
接口业务类型,系统层次化结构
性能与安全
配置防火墙太过于注重安全,会降低性能
2. ab接口压力测试工具
安装
yum install httpd-tools
使用
ab -n 2000 -c 2 http://127.0.0.1/
-n:总的请求数
-c:并发数
-k:是否开启长连接
3. 系统与Nginx性能优化
文件句柄
LinuxUnix一起皆文件,文件句柄就是一个索引
设置方式
- 系统全局性修改、用户局部性修改、进程局部性修改
系统全局性修改 和 用户局部性修改:
配置文件:/etc/security/limits.conf
# root:root用户 root soft nofile 65535 # hard 强制限制、soft 超过会发送提醒(邮件等),不限制 root hard nofile 65535 # *:所有用户 * soft nofile 65535 * hard nofile 65535
进程局部性修改
配置文件:/etc/nginx/nginx.conf
# 针对nginx进程进行设置 worker_rlimit_nofile 35535;4. CPU的亲和
CPU亲和:将进程/线程与cpu绑定,最直观的好处就是提高了cpu cache的命中率,从而减少内存访问损耗,提高程序的速度。
物理CPU数量:cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
CPU核心:cat /proc/cpuinfo | grep "cpu cores" | uniq
核心和进程使用率:先按top,再按1
# /etc/nginx/nginx.conf # nginx建议数量跟cpu核心数保持一致 worker_processes 2; # 配置cpu亲和 worker_cpu_affinity 0000000000000001 0000000000000010 # 与上一行等价,自动对应(Nginx1.9版本以上) worker_cpu_affinity auto
查看Nginx的cpu绑定情况:
ps -eo pid,args,psr | grep [n]ginx
# nginx服务使用nginx用户(最好不要使用root用户) user nginx; # cpu亲和(最好跟核心数保持一致) worker_processes 2; worker_cpu_affinity auto; # error的日志级别设置为warn error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; # 文件句柄对于进程间的限制(建议1w以上) worker_rlimit_nofile 35535; # 事件驱动器 events { use epoll; # 限制每一个worker_processes进程可以处理多少个连接 worker_connections 10240; } http { include /etc/nginx/mime.types; default_type application/octet-stream; #字符集(服务端响应发送的报文字符集) charset utf-8; 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 /var/log/nginx/access.log main; # 静态资源的处理 sendfile on; #tcp_nopush on; keepalive_timeout 65; # gzip压缩(对于IE6或以下版本对于gzip压缩支持不是很好) gzip on; # IE6或以下不进行压缩(兼容) gzip_disable "MSIE [1-6]."; gzip_http_version 1.1; include /etc/nginx/conf.d/*.conf; }三、Nginx安全 1. 常见的恶意行为
爬虫行为和恶意抓取、资源盗用
基础防盗链功能,不让恶意用户能轻易的爬取网站对外数据
secure_link_module,对数据安全性提高加密验证和实效性,适合如核心重要数据
acces_module,对后台、部分用户服务的数据提供IP防控
2. 常见的攻击手段
后台密码撞库,通过猜测密码字典不断对后台系统尝试性登录,获取后台登录密码
后台登录密码复杂度
access_module,对后台提供IP防控
预警机制(一个IP在一段时间内重复不断请求等)
3. 文件上传漏洞利用一些可以上传的接口将恶意代码植入到服务器中,再通过url去访问以执行代码
例:http://www.rona1do.top/upload...(Nginx将1.jpg作为php代码执行)
# 文件上传漏洞解决办法 location ^~ /upload { root /opt/app/images; if ($request_file ~* (.*).php){ return 403; } }4. SQL注入
利用未过滤/未审核用户输入的攻击方法,让应用运行本不应该运行的SQL代码
Nginx+LUA配置WAF防火墙防止SQL注入
ngx_lua_waf 下载地址
使用waf步骤:
git clone https://github.com/loveshell/ngx_lua_waf.git
cd ngx_lua_waf
mv ngx_lua_waf /etc/nginx/waf
vim /etc/nginx/waf/conf.lua,修改RulePath为对应路径(/etc/nginx/waf/wafconf)
vim /etc/nginx/waf/wafconf/post,加入一行,sors+,放sql注入的正则
集成waf:
# /etc/nginx/nginx.conf lua_package_path "/etc/nginx/waf/?.lua"; lua_shared_dict limit 10m; init_by_lua_file /etc/nginx/waf/init.lua; access_by_lua_file /etc/nginx/waf/waf.lua
reload Nginx
5. 复杂的访问攻击中CC攻击
waf/conf.lua配置文件中打开防cc攻击配置项
CCDeny="on"
CCrate="100/60" #每60秒100次请求
四、Nginx总结
定义Nginx在服务体系中的角色
静态资源服务
代理服务
动静分离
设计评估
硬件
CPU、内存、硬盘
系统
用户权限、日志目录存放
关联服务
LVS、keepalive、syslog、Fastcgi
配置注意事项
合理配置
了解原理(HTTP、操作系统...)
关注日志
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/39907.html
摘要:请求的多阶段异步处理多阶段异步处理请求与事件驱动架构是密切相关的,也就是说,请求的多阶段异步处理只能基于事件驱动架构实现。 前言 最近在读 Nginx 相关的书籍,做一下读书笔记。 Nginx 作为业界知名的高性能服务器,被广泛的应用。它的高性能正是由于其优秀的架构设计,其架构主要包括这几点:模块化设计、事件驱动架构、请求的多阶段异步处理、管理进程与多工作进程设计、内存池的设计,以下内...
摘要:请求的多阶段异步处理多阶段异步处理请求与事件驱动架构是密切相关的,也就是说,请求的多阶段异步处理只能基于事件驱动架构实现。 前言 最近在读 Nginx 相关的书籍,做一下读书笔记。 Nginx 作为业界知名的高性能服务器,被广泛的应用。它的高性能正是由于其优秀的架构设计,其架构主要包括这几点:模块化设计、事件驱动架构、请求的多阶段异步处理、管理进程与多工作进程设计、内存池的设计,以下内...
阅读 881·2021-11-23 09:51
阅读 1088·2021-11-15 17:57
阅读 1666·2021-09-22 15:24
阅读 811·2021-09-07 09:59
阅读 2221·2019-08-29 15:10
阅读 1847·2019-08-29 12:47
阅读 750·2019-08-29 12:30
阅读 3368·2019-08-26 13:51