zoukankan      html  css  js  c++  java
  • Nginx从入门到实践(四)

    Nginx常见问题和排错经验,实践应用场景中的方法处理Nginx安全,常见的应用层安全隐患,复杂访问控制,Nignx的sql防注入安全策略,Nginx的整体配置,搭建合理Nginx中间件架构配置步骤、策略Nginx性能优化:架构优化,操作系统优化、Nginx优化等...

    常见问题

    多个server_name中虚拟主机读取的优先级

    当多个配置文件中server_name相同,端口也相同时,Nginx读取配置文件的时候是按照文件名顺序进行读取的,优先读取第一个文件名下的配置.
    server1.confserver2.conf,那优先加载的配置是server1.conf下面的配置.
    启动时会抛出警告

    多个location匹配的优先级

    =:进行普通字符精确匹配,也就是完全匹配(高优先级)
    ^~:表示普通字符匹配,使用前缀匹配(高优先级)
    ~ ~*:表示执行一个正则匹配()

    https://segmentfault.com/a/1190000002797606

    try_files使用

    按顺序检查文件是否存在

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

    $uri 这个是nginx的一个变量,存放着用户访问的地址,
    比如:http://www.xxx.com/index.html, 那么$uri就是 /index.html

    $uri/ 代表访问的是一个目录,比如:http://www.xxx.com/hello/test/,那么$uri/就是 /hello/test/

    完整的解释就是:try_files去尝试到网站目录读取用户访问的文件,如果第一个变量存在,就直接返回;
    不存在继续读取第二个变量,如果存在,直接返回;不存在直接跳转到第三个参数上。

    比如用户访问这个网地址:http://www.xxx.com/test.html
    try_files首先会判断他是文件,还是一个目录,结果发现他是文件,与第一个参数 $uri变量匹配。
    然后去到网站目录下去查找test.html文件是否存在,如果存在直接读取返回。如果不存在直接跳转到第三个参数,而第三个参数是一个location

    alias和root的使用区别

    location /request_path/image/ {
        root /loca_path/image/;
    }
    

    一个请求http://XXX.XXX.XXX.XXX/request_path/iamge/cat.png,则实际的资源路径为/local_path/image/request_path/image/cat.png,实际是root+请求路径

    location /request_path/image/ {
        alias /loca_path/image/;
    }
    

    一个请求http://XXX.XXX.XXX.XXX/request_path/iamge/cat.png,则实际的资源路径为/loca_path/image/cat.png,没有请求的那个路径。

    如何获取用户真实的ip信息

    使用remote_addr
    使用X-Forwarded-For
    使用X-Real-IP(自定义)

    常见错误码

    413 Request Entity Too Large
    修改用户上传文件限制 client_max_body_size

    502 bad gateway
    后端服务器无响应

    504 Gateway Time-out
    后端服务执行超时

    403 访问被拒绝
    404 资源未找到
    400 请求参数错误

    性能优化

    ab压测工具

    http://httpd.apache.org/docs/current/programs/ab.html

    系统与Nginx性能优化

    • 网络
    • 系统
    • 服务
    • 程序
    • 数据库,底层服务

    文件句柄设置

    • 文件句柄, Linux一切皆文件,文件句柄可以理解为就是一个索引
      • 文件句柄会随着我们进程的调用频繁增加
      • 系统默认对文件句柄有限制,不能让一个进程无限的调用
      • 需要限制每个进程和每个服务使用多大的文件句柄
      • 文件句柄是必须要调整的优化参数
    • 设置方式
      • 系统全局性修改
      • 用户局部性修改(vim /etc/security/limits.conf)
      • 进程局部性修改
        (vim /etc/nginx/nginx.conf)加入如下内容:
        worker_rlimit_nofile 35535;

    CPU亲和配置

    CPU亲和, 减少进程之间不断频繁迁移, 减少性能损耗

    将Nginx worker进程绑到不同的核心上

    //启动多少worker进程, 官方建议和cpu核心一致, 第一种绑定组合方式
    #worker_processes 24;
    #worker_cpu_affinity 000000000001 000000000010 000000000100 000000001000 000000010000 000000100000 000001000000 000010000000 000100000000 001000000000 010000000000 10000000000;
     
    //第二种方式
    #worker_processes 2;
    #worker_cpu_affinity 101010101010 010101010101;
     
    //最佳方式绑定方式
    worker_processes auto;
    worker_cpu_affinity auto;
    

    查看nginx worker进程绑定至对应cpu

    ps -eo pid,args,psr|grep [n]ginx
    

    Nginx通用配置优化

    user  nginx;
    worker_processes  auto; #使用的工作线程数
    worker_put_affinity auto; # CPU亲和配置
    # worker_cpu_affinity 01 10;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    # 调整至1w以上,负荷较高建议2-3w以上
    worker_rlimit_nofile 35535; #文件句柄设置
    
    events {
        use epoll;  # 使用epoll模型,提高并发性能
        worker_connections  10240; # 每一个worker可以处理的连接数
    }
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
        #Charset
        charset uft-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; # 静态服务器推荐打开
        #tcp_nodelay on;
        keepalive_timeout  65;
    
        gzip  on;
        gzip_disable "MSIE [1-6]."; # IE6以前不支持Gzip的压缩,关闭
        gzip_http_version 1.1;
    
        include /etc/nginx/conf.d/*.conf;
    }
    

    Nginx安全

    常见的恶意行为

    爬虫行为和恶意抓取,资源盗用

    预防方法:
    基础防盗链功能
    secure_link_module-数据加密
    access_module-对后台提供IP防护

    攻击手段之暴力破解

    密码撞库

    预防方法:
    提高密码复杂度
    access_module-对后台提供IP防护
    预警机制(结合lua)

    文件上传漏洞

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

    SQL注入

    Nginx+LUA防火墙功能

    https://github.com/loveshell/ngx_lua_waf

    Nginx版本更新和本身漏洞

    静态资源服务的功能设计

    Nginx作为代理服务的需求

    需求设计评估

  • 相关阅读:
    系统环境变量
    Shell入门(三)之字符串
    Shell入门(二)之变量
    Shell入门(一)之简介
    Spring入门(三)之IoC
    Spring入门(二)之下载与安装
    Spring入门(一)之简介
    面向对象与面向过程
    Hadoop入门(二)集群安装
    Hadoop入门(一)概念与单机安装
  • 原文地址:https://www.cnblogs.com/gaoyongjian/p/10124507.html
Copyright © 2011-2022 走看看