nginx常见问题整理和解决办法

以下就是我们整理的nginx常见的问题,解决办法我们例举了1-2种,大家可以都测试下。

常见问题

问题一:相同server_name多个虚拟主机优先级访问

  server{   listen 80;   server_name server1;   location{...}  }  server{   listen 80;   server_name server2;   location{...}  }

解决方法:

配置两个conf文件:server1.conf 和 server2.conf

根据Linux系统中文件顺序读取

问题二:location匹配优先级

  location = /code1/ {   rewrite ^(.*)$ /code1/index.html break;  }  location ~ /code.* {   rewrite ^(.*)$ /code3/index.html break;  }  location ^~ /code {   rewrite ^(.*)$ /code2/index.html break;  }

知识填坑:

=:进行普通字符精确匹配,完全匹配

^~:普通字符匹配,使用前缀匹配

~ ~*:表示执行一个正则匹配()

解决方法:

根据匹配找到最优匹配

优先级:完全匹配>正则匹配>前缀匹配

问题三:try_files使用

  location / {   try_files $uri $uri/ /index.html;  }

解决方法:

按顺序检查文件是否存在

问题四:Nginx的alias和root区别

  location /request_path/img/ {   root /local_path/img/;  }  location /request_path/img/ {   alias /local_path/img/;  }

解决方法:

root设置,最终请求的路径为/local_path/img/request_path/img/

alias设置,最终请求为/local_path/img/

问题五:通过多层代理,传递用户真实IP

解决方法:

  set x_real_ip=$remote_addr  $x_real_ip=真实IP

性能优化问题

优化考虑点:

当前系统结构瓶颈,如观察指标、压力测试

了解业务模式,如接口业务类型、系统层次化结构

性能与安全

接口压力测试工具:ab

安装:yum install httpd-tools

使用:ab -n 2000 -c 20 http://127.0.0.1/

nginx关于系统的优化点:

网络、系统、服务、程序、数据库

控制文件句柄数量,文件句柄就是一个索引

CPU亲和,使进程不会在处理器间频繁迁移,减少性能损耗

  vim /etc/nginx/nginx.conf  user nginx;  worker_processes 16;  worker_cpu_affinity auto;  worker_rlimit_nofile 15535;  events{   use epoll;   worker_connections 10240;  }  http{   include /etc/nginx/mime.types;   default_type application/octet-stream;   #Charset   charset utf-8;   log_format main '';   access_log /var/log/nginx/access.log main;   #Core module   sendfile on;   keepalive_timeout 65;   #Gzip module   gzip on;   gzip_disable "MSIE [1-6].";   gzip_http_version 1.1;   #Virtal server   include /etc/nginx/conf.d/*.conf;  }

nginx安全问题及防范策略

恶意行为

问题:爬虫行为和恶意抓取、资源盗用

解决方法:

基础防盗链功能:不让恶意用户轻易的爬取网站对外数据

secure_link_module模块:对数据安全性提高加密验证和失效性,对一些重要数据使用

access_module模块:对后台、部分用户服务的数据提供IP监控,如规定IP等

应用层攻击

问题一:后台密码撞库,通过密码字典不断对后台系统登录性尝试,获取后台密码

解决方法:

后台密码复杂的,大小写数字字符等

预警机制,同一IP的频繁访问

access_module模块:对后台、部分用户服务的数据提供IP监控

问题二:文件上传漏洞,利用可以上传的接口将恶意代码植入服务器中,再通过url访问以执行

解决方法:

针对一些木马和后缀等做一定的处理

  location ^~ /upload{   root /usr/share/html;   if($request_filename ~*(.*).php){    return 403; #拒绝访问   }  }

问题三:SQL注入,利用未过滤或未审核的用户输入的攻击手段,让应用运行本不应该运行的SQL代码

解决方法:

针对' or 1=1 #等常见注入代码进行检测

搭建安全waf,针对渗透规则写正则表达式

nginx防攻击策略

使用nginx+Lua搭建安全waf防火墙

防火墙功能:

拦截Cookie类型攻击

拦截异常post请求

拦截cc攻击,频繁访问

拦截URL,不想暴露的接口

拦截arg参数

参与评论