• nginx优化


    1.  隐藏nginx header里面的版本信息

    执行:curl –I 127.0.0.1会显示nginx的版本信息

    隐藏操作:在http标签内加入“server_tokenoff”参数

    2.  更改源码隐藏软件名称及版本号

    在nginx编译安装之前,先更改,之后再编译安装

    cd /nginx-1.6.3/src/core

    sed –n ’13,17p’ nginx.h里面修改NGINX_VERSION

    修改ngx_http_header_filter_module.c

    sed –I ‘s#Server:nginx#Server:Apache#g’ ngx_http_header_filter_module.c

    修改ngx_http_special_response.c

    3 更改nginx默认用户及用户组(worker进程优化)

    建立nginx用户 useradd nginx–s/sbin/nologin –M

    id nginx确认

    在nginx.conf最外层上面配置usernginx;即可

    也可以编译的时候指定用户

    3.  让worker进程使用普通用户运行

    为master服务降权:使用非root跑nginx master

    注意不能用80特权端口,前端nginx反向代理转端口在启动的时候指定配置文件

    4.  配置nginx worker进程个数

    nginx由master和worker进程组成,master进程相当于管理员,worker进程为用户提供服务一般设置为cpu核数×2,用top按1查看cpu数量

    修改nginx.conf配置文件第一行

    worker_processes 4;

    5.  根据cpu核数进行nginx进程优化

    work_processes 4;

    worker_cpu_affinity 0001 0010 0100 1000;

    6nginx事件处理模型优化

    nginx的连接处理机制在不同的操作系统上采用不同的IO模型,在linux下,nginx使用epoll的IO多路复用模型,windows下使用icop模型

    具体配置:

    events{

    use epoll;

    worker_connections 1024;

    }

    6.  调整nginx worker单个进程允许的客户端最大连接数

    这个值根据服务器性能和程序的内存来指定(一个进程启动使用的内存根据程序确定)

    events{

    use epoll;

    worker_connections 201480;

    }

    这个参数是单个进程的最大连接数,实际最大连接数公式为:

    Max_client=worker_processes*worker_connections

    8配置nginx worker进程最大打开文件数

    worker_rlimit_nofile 65535;

    相当于系统ulimit –HSn,应该是总的

    9开启高效的文件传输模式

    参数在http标签设置为:sendfileon;tcp_nopush on;(只有在sendfile开启模式下有效

    10设置连接超时时间

    建立连接也是消耗资源的,我们一般断掉那些连上的链接,但是不做事的

    php网站建议短链接,java网站建议长连接

    http标签设置:

    keepalive_timeout 60;

    设置客户端连接保持会话的超时时间,超过这个时间,服务器会关闭该链接

    tcp_nodelay on;

    打开tcp_nodelay,在包含keepalive参数才有效

    client_header_timeout 15;

    请求头超时

    client_body_timeout 15

    请求主体超时

    send_timeout 15;

    指定响应客户端超时时间,这个超时时间仅仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx将会关闭连接

    11.上传文件大小限制

    http{

    client_max_body_size 10m;

    }

    12.fastcgi调优(配合php引擎动态服务)

    cache读取缓存区

    buffer写入缓存区

    fastcgi是静态服务和动态服务之间的一个接口

    http {

    #向fastcgi传送请求的超时时间,这个值是指已经完成两次握手后向fastcgi传送请求的超时时间

    fastcgi_send_timeout 240;

    #指定链接到后端fastcgi的超时时间

    fastcgi_connect_timeout 240;

    #指定收fastcgi答应的超时时间,这个值是指已经完成两次握手后接收fastcgi应答的超时时间、

    fastcgi_read_timeout 240;

    #指定读取fastcgi应答第一部分需要用多大的缓冲区,这个值表示将使用1个64kb的

    fastcgi_buffer_size 64kb的缓冲区读取应答的第一部分(应答头),可以设置为fastcgi_buffers选定的的缓冲区大小

    fastcgi_buffers 64k;

    #指定本地需要用多少和多大的缓冲区来缓冲fastcgi,如果一个php脚本所产生的页面大小为256kb,那么会分配4个64kb的缓存区来缓存,如果页面大于256kb,那么大于256kb的部分会缓存到fastcgi_temp指定的路径中,但是这并不是好方法,因为内存中的数据处理速度大于硬盘,一般这个值应该为站点中php所产生的页面大小的中间值,如果站点大部分脚本产生的页面大小为256kb,那么可以把这个值设置为“816k ”464k“等

    fastcgi_buffers 4 64k;

    #建议设置为fastcgi_buffer的两倍,繁忙时段的buffer

    fastcgi_busy_buffers_size 128k;

    ##在写入fastcgi_temp_path时将用多大的数据库,默认值是fastcgi_buffers的两倍,设置上述数值小时负载上来时可能报 502 badgateway

    fastcgi_temp_file_write_size 128k;

    ##表示开启fastcgi缓存为其指定一个名称,开启缓存非常有用,可以有效降低cpu的负载,并防止502错误

    fastcgi_cache oldboy_nginx;

    #用来指定应答代码的缓存时间,实例中的值表示将2000和302应答缓存一个小时,要和fastcgi_cache配合使用

    fastcgi_cache_valid 200 302 1h;

    #将301应答缓存一天

    fastcgi_cache_valic 301 1d;

    #将其他应答缓存为1分钟

    fastcgi_cache_valid any 1m;

    ##请求的数量

    fastcgi_cache_min_uses 1;

    #定义缓存的路径

    fastcgi_cache_path

    13.配置nginx gzip压缩功能(重要)

    使用的模块ngx_http_gzip_module(nginx)

    mod_deflate模块(apaceh)

    常用的压缩对象:纯文本(js,css,html),对于图片,视频,FLASH什么的不压缩,gzip——types参数控制,因为压缩占用cpu

    对应参数的含义如下:

    gzip on;

    #开启压缩功能

    gzip_min_length 1k;

    #设置允许压缩的页面最小字节数,页面字节数从header头顶content-length中获取,默认值0,不管页面多大都进行压缩,建议设置成大于1k,如果小于1k可能会越压越大。

    gzip_buffers 4 32k;

    #压缩缓冲区大小,表示申请4个单位为32k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。

    gzip_http_version 1.1;

    ##压缩版本拥有设置http协议版本

    gzip_comp_level 9;

    ###压缩比例,用来指定gzip压缩比 1最小9最大 建议设置为2.设置过大消耗cpu资源就多

    gzip_types text/css test/xmlapplication/javascript;

    ##指定压缩的类型,test/html类型总是会被压缩

    gzip_vary on;

    ##vary header支持,改选项可以让前端的缓存服务器经过gzip压缩的页面,例如用squid缓存经过nginx压缩的数据。

    14.配置nginx expires缓存功能

    对于图片,css,js等元素更改的机会较少,特别是图片,这时可以将图片设置在浏览器本地缓存365天或更长

    location ~.*.(gif|jpg|png|bmp|swf)$

    {

    expires 3650d;

    location ~.*.(js|css)$

    {

    expires 30d;

    }

    expire功能优点

    1expires可以降低网站购买的带宽,节约成本

    2同事提升用户访问体验

    3减轻服务端压力

    缺点:

    被缓存的页面或数据更新了,用户看到的可能还是旧的内容,反而影响用户体验

    解决办法:

    第一个缩短缓存时间,例如1天,不彻底,除非更新频率大于1天

    第二个对缓存的对象改名

    a图片,附件一般不会被用户修改,如果用户修改了,实际上也是更改文件名重新传来而已

    b网升级对于js,css元素,一般可以改名,把css,js,推送到cdn

    15.nginx日志相关优化与安全

    1)配置日志切割脚本并写入计划任务

    cd /app/logs

    mv www_access.log www_acess_$(date +%F –d-1day).log

    /application/nginx/sbin/nginx –s reload

    cat >>/var/spool/cron/root<<eof

    00 00 * * * /bin/sh cut_nginx_log.sh>/dev/null2>&1

    eof

    2)不记录不需要的访问日志

    对于健康检查或某些(图片,js,css)日志,一般不记录日志,因为在统计pv时是按照页面计算,而且日志写入频繁会消耗磁盘IO降低服务器性能。

    参数:access_log off;

    1.  访问日志的权限设置

    假设日志目录为/app/logs,则授权

    chown –R root.root /app/logs

    chmod –R 700 /app/logs

    16 nginx站点目录及文件URL访问控制(重要:防止恶意解析)

    1)根据扩展名限制程序和文件访问

    作用:禁止目录下指定文件被访问,或者禁止指定目录下所有内容被访问

    最佳应用场景:集群的共享存储,本来就应该只是资源文件,禁止指定扩展名程序被执行,php,sh,pl

    nginx下禁止访问资源目录下的php程序文件,配置方法如下:

    location ~^/images/.*.(php|php5|.sh|.pl|.py)$

    {

    deny all;

    if ($request_method !~^(GET|HEAD|POST)${

    return 404;

    2)nginx下配置禁止访问.txt文件

    location ~*.(txt|doc)${

    if (-f $request_filename){
    ###rewrite^^^^^

    break;

    }

    location ~*.(txt|doc)${

    root /data/www;

    deny all;

    }

    3)使用ngx_http_access_module限制ip访问

    17.配置nginx图片及目录防盗链

    原理:是利用http referer日志信息

    当浏览器向web服务器发送请求的时候,一般会带上referer,告诉服务器我从那个页面链接过来的,服务器可以借此获得一下信息用于处理

    location~*.(jpg|gif|png|swf|flv|wma|asf|mp3|mmf|zip|rar)${

    valid_referers none blocked *.etiantian.orgetiantian.org;

    if ($invalid_referer){

    rewrite ^/ http://www.xiaofeng886.org/img/nolink.jpg;

    }

    }

    18.nginx错误页面优雅显示

    参数:error_page 403 /403.html;

    19 nginx 方爬虫优化

    20 使用tmpfs文件系统给/tmp

    提高效率,部分程序切图片操作临时放到/tmp下,可以把tmp设置成内存文件系统,占用内存空间的,就是从内存里拿出一块来当磁盘用

    mount –t tmpfs –o size=16m tmpfs /tmp

    21放DDos攻击

    1)控制单个ip的并发请求防止DOS攻击

    使用limit_conn_zone进行控制,控制单个IP或域名的访问次数,限制连续访问

    者http标签添加控制,可以添加多个

    limit_conn_zone $binary_remote_addr zone=perip:10m;

    limit_conn_zone $binary_name zone=perserver:10m;

    server {

    limit_conn perip 10;

    limit_conn perserver 100;

    2)限制单个的请求速率防止DOS的访问速率

    使用limit_req_zone进行控制,控制单个ip访问速率

    22为web服务增加用户身份验证(适合内部机密网址)

    nginx配置

    location /phpmyadmin/{

    auth_basic “oldboy training”;

    auth_basic_user_file/application/nginx/conf/htpasswd;

    }

    创建密码文件

    htpasswd –cb /application/nginx/conf/htpasswdoldboy 123456

    cat /application/nginx/conf/htpasswd

    chmod 400 /application/nginx/conf/htpasswd

    chown nginx /application/nginx/conf/htpasswd

    23 让nginx运行于监牢模式

    创建普通用户,将站点目录以及nginx.conf放到普通用户目录,之后用/application/nginx/sbin/nginx –c

    配置文件来启服务

    注意相关日志所在路径,指定pid,端口不能用80

    useradd inca

    cd /home/inca

    mkdir conf www log

    echo inca >www/index.html

    error_log /home/inca/log/error.log

    pid /home/inca/log/nginx.pid

    指定站点目录

    日志

    端口不能用80

    用普通用户启动

    解决端口问题

  • 相关阅读:
    vim中ctags应用
    LCD屏参数及应用举例
    modbus概述
    Modbus常用
    git常用操作
    linux内核学习
    截图工具gsnap
    信号signal编号及意义及一般处理
    oracle 表空间 数据文件 表的关系
    IBM MQ 2035 或 2013认证错误的解决方法
  • 原文地址:https://www.cnblogs.com/jinbiaof/p/6844264.html
Copyright © 2020-2023  润新知