当前位置: 首页 > 后端技术 > PHP

Nginx-architecture

时间:2023-03-30 05:17:22 PHP

Nginx-architecture一、Nginx常见问题1、多个虚拟主机优先访问同一个server_name#三个配置文件:#testserver1:server_nametestserver1www.rona1do.top;root/opt/app/code1;#testserver2:server_nametestserver2www.rona1do.top;root/opt/app/code2;#testserver3:server_nametestserver3www.rona1do.top;root/opt/app/code3;上面配置三个相同server_name的虚拟主机,会先访问testserver1,访问的优先级按照服务器的读取顺序,即文件名的顺序。2.位置匹配优先级=:普通字符精确匹配,即精确匹配^~:表示匹配普通字符,使用前缀匹配~~:表示进行正则匹配(加上不区分大小写)以上优先级从上往下tobottom较低的优先级降低。前两个匹配项是完全匹配项。达到匹配后,将不再进行搜索。当正则匹配匹配到对应的字符串后,会继续寻找更准确的匹配。3、使用Nginx的try_files依次检查文件是否存在#首先检查对应url地址下的文件是否存在,不存在则查找/index.php,类似重定向location/{try_file$uri/index.php;}4.Nginx的alias和root的区别/request_path_image/cat.pngaliaslocation/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,而不是用户的ipx-forwarded-容易被篡改。一般解决方案:可以按照一级Proxy协商,设置header信息x_real_ip来记录用户的ipsetx_real_ip=$remote_addr6。Nginx常见错误码413:requestentitytoolargeuseruploadfilelimit:client_max_body_size502:badgatewaybackendservicenoresponse504:gatewaytime-outbackendserviceTimeout二、Nginx性能优化1、性能优化注意事项当前系统结构瓶颈观察指标(顶视图状态,日志等),压力测试了解业务模型接口业务类型,系统层次结构性能和安全配置防火墙过于注重安全,会降低性能2.安装yuminstallhttpd-toolswithab接口压力测试工具,使用ab-n2000-c2http://127.0.0.1/-n:总请求数-c:并发数-k:是否开启长连接3.系统和Nginx性能优化文件句柄LinuxUnix都是文件,文件句柄是一种索引设置方法模式-系统全局修改,用户本地修改,进程本地修改系统全局修改,用户本地修改:配置文件:/etc/security/limits.conf#root:root用户rootsoftnofile65535#hardenforcelimit、soft会发送提醒(email等)如果超过则root不受限制setworker_rlimit_nofile35535;4.CPUaffinityCPUaffinity:将进程/线程绑定到cpu上,最直观的好处就是提高cpu缓存的命中率,从而减少内存访问损失,提高程序运行速度物理CPU数量:cat/proc/cpuinfo|grep“物理ID”|排序|独特|wc-lCPU内核:cat/proc/cpuinfo|grep“cpu核心”|uniq核心及进程使用:先按top,再按1#/etc/nginx/nginx.conf#nginx推荐数量与cpu核数一致worker_processes2;#配置cpu亲和性worker_cpu_affinity00000000000000010000000000000010#相当于上一行,自动对应(Nginx1.9及以上)worker_cpu_affinityautoviewNginxcpubinding:ps-eopid,args,psr|grep[n]ginx5。Nginx通用配置优化#nginx服务使用nginx用户(最好不是root用户)用户nginx;#cpuaffinity(最好与核心数一致)worker_processes2;worker_cpu_affinity自动;#error的日志级别设置为warnerror_log/var/log/nginx/error.logwarn;pid/var/run/nginx.pid;#文件句柄限制为进程(推荐1w以上)worker_rlimit_nofile35535;#事件驱动事件{使用epoll;#限制每个worker_processes进程可以处理多少个连接worker_connections10240;}http{include/etc/nginx/mime.types;default_type应用程序/八位字节流;#字符集(服务器响应发送的消息的字符集)charsetutf-8;log_formatmain'$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.logmain;#静态资源处理sendfileon;#tcp_nopush上;keepalive_timeout65;#gzip压缩(对于IE6或以下,gzip压缩支持不是很好)gzipon;#IE6以下不压缩(兼容)gzip_disable"MSIE[1-6]\.";gzip_http_version1.1;包括/etc/nginx/conf.d/*.conf;}三、Nginx安全1.常见恶意爬虫行为及恶意爬取,资源窃取基本防盗链功能,防止恶意用户轻易爬取网站外部数据secure_link_module,提高数据安全性加密验证和有效性,适用于acces_module等核心重要数据,为后台数据和部分用户服务提供IP防控2.常见攻击方式后台密码打库,后台系统不断尝试登录后台系统通过猜测密码字典获取后台登录密码后台登录密码复杂度access_module,为后台提供IP防控预警机制(一个IP重复请求一段时间等)3.文件上传漏洞利用一些可上传的接口将恶意代码植入服务器,然后通过url访问执行e代码示例:http://www.rona1do.top/upload...(Nginx执行1.jpg作为php代码)#文件上传漏洞解决位置^~/upload{root/opt/app/images;如果($request_file~*(.*)\.php){返回403;}}4.SQL注入使用unfiltered/unaudited用户输入攻击方式使应用程序运行不应该运行的SQL代码Nginx+LUA配置WAF防火墙防止ngx_lua_waf下的SQL注入使用waf加载地址的步骤:gitclonehttps://github.com/loveshell/ngx_lua_waf.gitcdngx_lua_wafmvngx_lua_waf/etc/nginx/wafvim/etc/nginx/waf/conf.lua,修改RulePath为对应路径(/etc/nginx/waf/wafconf)vim/etc/nginx/waf/wafconf/post,添加一行,\sor\s+,把sql注入的常规集成waf:#/etc/nginx/nginx.conflua_package_path"/etc/nginx/waf/?.lua";lua_shared_dictlimit10m;init_by_lua_file/etc/nginx/waf/init.lua;access_by_lua_file/etc/nginx/waf/waf.luareloadNginx5.复杂访问攻击CC攻击waf/conf.lua配置文件打开防cc攻击配置项CCDeny="on"CCrate="100/60"#60秒100次请求四、Nginx总结定义Nginx在服务系统中的作用静态资源服务代理服务动静分离设计评估硬件CPU、内存、硬盘系统用户权限、日志目录存储关联服务LVS、keepalive、syslog、Fastcgi配置注意事项合理配置了解原理(HTTP、操作系统...)按照日志