不知道但是很常见的nginx问题

服务器
本文是作者在 segmentfault 里无意中看到的,感觉虽然说的都是很简单的东西,但还是有很强的启迪作用的。所以就收录到学习笔记来分享了。至少对于刚刚开始接触使用Nginx的新手们来说还是帮助不小的。

本文是明月在 segmentfault 里无意中看到的,感觉虽然说的都是很简单的东西,但还是有很强的启迪作用的。所以就收录到学习笔记来分享了。至少对于刚刚开始接触使用Nginx的新手们来说还是帮助不小的。

nginx使用问题及解决方法

常见问题

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

  1. server{ 
  2.   listen 80; 
  3.   server_name server1; 
  4.   location{...} 
  5. server{ 
  6.   listen 80; 
  7.   server_name server2; 
  8.   location{...} 

解决方法:

  • 配置两个conf文件:server1.conf 和 server2.conf
  • 根据Linux系统中文件顺序读取

[[219211]]

问题二:location匹配优先级

  1. location = /code1/ { 
  2.   rewrite ^(.*)$ /code1/index.html break; 
  3.  
  4. location ~ /code.* { 
  5.   rewrite ^(.*)$ /code3/index.html break; 
  6.  
  7. location ^~ /code { 
  8.   rewrite ^(.*)$ /code2/index.html break; 

知识填坑:

  • =:进行普通字符精确匹配,完全匹配
  • ^~:普通字符匹配,使用前缀匹配
  • ~ ~*:表示执行一个正则匹配()

解决方法:

  • 根据匹配找到最优匹配
  • 优先级:完全匹配>正则匹配>前缀匹配

问题三:try_files使用

  1. location / { 
  2.   try_files $uri $uri/ /index.html; 

解决方法:

  • 按顺序检查文件是否存在

问题四:Nginx的alias和root区别

  1. location /request_path/img/ { 
  2.   root /local_path/img/; 
  3.  
  4. location /request_path/img/ { 
  5.   alias /local_path/img/; 

解决方法:

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

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

解决方法:

  1. set x_real_ip=$remote_addr 
  2. $x_real_ip=真实IP 

性能优化问题

优化考虑点:

  • 当前系统结构瓶颈,如观察指标、压力测试
  • 了解业务模式,如接口业务类型、系统层次化结构
  • 性能与安全

接口压力测试工具: ab

  • 安装: yum install httpd-tools
  • 使用: ab -n 2000 -c 20 http://127.0.0.1/

nginx关于系统的优化点:

  • 网络、系统、服务、程序、数据库
  • 控制文件句柄数量,文件句柄就是一个索引
  • CPU亲和,使进程不会在处理器间频繁迁移,减少性能损耗
  1. vim /etc/nginx/nginx.conf 
  2.  
  3. user nginx; 
  4. worker_processes 16; 
  5. worker_cpu_affinity auto; 
  6. worker_rlimit_nofile 15535; 
  7. events{ 
  8.   use epoll; 
  9.   worker_connections 10240; 
  10. http{ 
  11.   include /etc/nginx/mime.types; 
  12.   default_type application/octet-stream; 
  13.  
  14.   #Charset 
  15.   charset utf-8; 
  16.  
  17.   log_format main ''
  18.   access_log /var/log/nginx/access.log main; 
  19.  
  20.   #Core module 
  21.   sendfile on
  22.   keepalive_timeout 65; 
  23.  
  24.   #Gzip module 
  25.   gzip on
  26.   gzip_disable "MSIE [1-6]\."
  27.   gzip_http_version 1.1; 
  28.  
  29.   #Virtal server 
  30.   include /etc/nginx/conf.d/*.conf; 

nginx安全问题及防范策略

恶意行为

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

解决方法:

  • 基础防盗链功能:不让恶意用户轻易的爬取网站对外数据
  • secure_link_module 模块:对数据安全性提高加密验证和失效性,对一些重要数据使用
  • access_module 模块:对后台、部分用户服务的数据提供IP监控,如规定IP等

应用层攻击

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

解决方法:

  • 后台密码复杂的,大小写数字字符等
  • 预警机制,同一IP的频繁访问
  • access_module 模块:对后台、部分用户服务的数据提供IP监控

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

解决方法:

  • 针对一些木马和后缀等做一定的处理
  1. location ^~ /upload{ 
  2.   root /usr/share/html; 
  3.   if($request_filename ~*(.*)\.php){ 
  4.     return 403;  #拒绝访问 
  5.   } 

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

解决方法:

  • 针对' or 1=1 #等常见注入代码进行检测
  • 搭建安全waf,针对渗透规则写正则表达式

nginx防攻击策略

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

防火墙功能:

  • 拦截Cookie类型攻击
  • 拦截异常post请求
  • 拦截cc攻击,频繁访问
  • 拦截URL,不想暴露的接口
  • 拦截arg参数
责任编辑:武晓燕 来源: 明月学习笔记
相关推荐

2017-03-17 20:03:20

人脸识别

2020-07-28 08:26:34

WebSocket浏览器

2020-06-12 09:20:33

前端Blob字符串

2020-07-29 07:37:20

Git 修复项目

2021-07-14 11:25:12

CSSPosition定位

2010-08-23 09:56:09

Java性能监控

2015-06-19 13:54:49

2012-11-23 10:57:44

Shell

2020-08-11 11:20:49

Linux命令使用技巧

2021-10-17 13:10:56

函数TypeScript泛型

2021-12-29 11:38:59

JS前端沙箱

2021-12-22 09:08:39

JSON.stringJavaScript字符串

2022-05-30 08:18:35

门面模式子系统对象

2009-12-10 09:37:43

2011-09-15 17:10:41

2022-10-13 11:48:37

Web共享机制操作系统

2021-02-01 23:23:39

FiddlerCharlesWeb

2018-05-10 11:50:13

Docker容器冷知识

2010-04-10 13:06:24

Windows Emb

2018-12-06 09:12:58

点赞
收藏

51CTO技术栈公众号