zoukankan      html  css  js  c++  java
  • linux_Nginx优化

    1. 更改默认用户

      a. 在nginx.conf中添加user指定用户

    user web_nginx web_nginx;
    
    # nginx 用户大家都知道,通过更改默认用户实现,和http同级

      b. 编译时更改用户

    --user=web_nginx --group=nginx
    
    ps -ef | grep nginx                       # 检查进程相关信息
    
    # 安全策略,让所有服务以普通用户身份跑,权限小了,破坏性就低了,安全性高了

    2. 配置 work_processes 参数

      work_processes auto;

    grep "physical id" /proc/cpuinfo         # 查看cpu核数
    
    # top 后按 1 也是查看cpu核数
    
    # 考虑cpu的个数和核数,依据服务场景,考虑最高 2*cpu个数*单个cpu核数
    
    # auto会去自动检查

    3. 配置每个进程最大打开文件数

    work_rlimit_nofile 65535;
    
    # 这个参数要小于 65535 , 40000 左右参数最优,不能把系统压死
    # 配置在 主配置中 main

    4. 配置 events 内对应参数

      a. 调节cpu亲和力,软件可能默认配置,把每个进程分配到不同的cpu核心

    worker_cpu_affinity 0001 0010 0100 1000;
    
    # 这个是4核心cpu,用4个二进制位表示,0表示其中一核心不使用,1表示使用该核心
    
    # 用top命名查看负载情况,监控系统性能指标
    
    # 通过这个压力测试,选择是否配置这个参数,软件默认会优化
    
    # webbench -c 20000 -t 180 http://10.0.0.190/
    
    # -c 表示并发, -t表示时间

      b. 事件处理模型的优化

    use epoll;
    
    # 使用epoll IO多路复用模型
    
    # 标准 epoll 和select 模型,高并发使用epoll模型

      c. 调节单个进程最大连接数

    work_connections 20480;
    
    # 这个参数受os进程最大打开文件数限制,需要执行 ,需要执行 ulimit -HSn 65535 或者
    
    # 配置相应文件后,这个参数设置才能生效,4096 10421 这两个参数就不错了
    
    # 最大连接数 = work_process * work_connections
    
    # 思想:数据库相当于马路,并发相当于卡车,数据库才是瓶颈,不能把数据库压蹦了
    
    # 数据库一旦崩溃,任何车辆都不能跑了
    
    # 必要时,舍弃一些连接,保持最核心连接

    5. 优化http参数

      a. 隐藏Nginx版本信息

    curl -I www.yunhello.cn        
    # 将会看到相应头,模仿浏览器访问
    
    ############################
    
    server_tokens off;
    
    # 默认开启状态,off关闭显示服务版本号

      b. 优化服务器名字的hash表大小

    server_names_hash_max_size 512;
    
    server_names_hash_bucket_size 32|64|128;
    
    # 单位是 k
    
    # grep cache_alignment /proc/cpuinfo      查看cpu缓存行信息
    
    # server_names_hash_max_size  参数是 CPU缓存行的 4~5倍
    
    # server_names_hash_bucket_size 参数取决于CPU缓存行长度(CPU L1)

      C. 开启高效的文件传输模式

    sendfile on;
    
    tcp_nopush on;
    tcp_nodelay on; # 网络IO阻塞

      d . 设置连接超时,等待时间

    keepalive_timeout 60;
    
    # 这个参数主配置文件默认就有,需要设置到对应的server中单独使用
    # 如果 -t 检查出错,keepalive_timeout不能配置在主配置文件中
    
    # 单位 秒, tcp建立连接后保持会话状态时间
    
    client_header_timeout 15;
    
    # 读取客户端请求头时间,等待时间内,内客户端还没有发送任何数据,断开并返回407错误
    
    client_body_timeout 15;
    
    # 读取请求主体时间,结果和读取客户端请求头时间一样
    
    send_timeout 15;
    
    # 响应客户端时间,等待时间内,客户端什么都不拿,断开连接
    
    # 大网站核心思想: 先让首屏加载,然后慢慢加载后面的屏,把网页分开发给用户

      e. 限制上传文件大小

    client_max_body_size 10m;
    
    # 请求大于10M将会报413错误,设置为0,表示不限制
    
    # 还受动态语言限制,比如php等

    6. 禁止直接通过ip访问服务

    vim extra/forbid_ip.conf
    # 新建一个server,写入一下数据,禁止用户直接通过ip访问服务器
    
    server {
    
        listen      80;
    
        server_name "";
    
        return      444;
    
    }

    7. 配置nginx gzip压缩功能

      依赖ngx_http_gzip_module模块,默认支持,可以在http和sever中配置

      作用: 对请求内容压缩

      优点:

              节约网站带宽传输速度快,同时提高用户访问体验

      缺点:

              占用更多的CPU资源

      应用: 文本,普通的数据文件和程序(js, css, html),压缩比最高

      不要压缩文件: 图片,附件,视频,FLASH,1k以下文件

    gzip on;
    
    # 开启gzip压缩
    
    gzip_min_lenght 1k;
    
    # 允许压缩的最小文件大小,页面大小可以从浏览器中header头的Content-Length
    
    # 默认为0,所有文件都压缩
    
    gzip_buffers 4 32k;
    
    # 设置压缩缓冲区大小,申请4个单位为32k的内存作为压缩结果流缓存
    
    # 默认申请与原始数据大小相同的内存空间来存储结果
    
    gzip_http_version 1.1;
    
    # 指定压缩版本,默认1.1且大多数浏览器已经支持gzip解压,使用默认即可
    
    gzip_comp_level 3;
    
    # 3是压缩比例,数字越大压缩比越大,消耗cpu资源越多,按需求设置
    
    gzip_types text/plain application/javascript text/css application/xml;
    
    # 指定压缩数据类型
    
    # text/html 类型总是会被压缩,mime.types查看压缩类型,在Nginx中conf下
    
    gzip_vary on;
    
    # vary header 支持,告诉缓存服务器到最终客户才解压

    8. 配置缓存过期时间 location

      缓存优点:

        1. 第一次以后,访问网站快,大部分东西缓存在本地,体验好

        2. 节省服务带宽,成本降低

        3. 服务器压力降低,成本降低

           缓存缺点:

        网站如果改版,对应的用户看到的还是旧的(js css 图片)

        如何解决这个坏处?

          1. 缓存过期时间短一些

          2. 缓存资源文件更新时,通过改名,图片和附件不会改,升级更改js和css服务,一般把css、js推送到CDN

      企业网站缓存文件时间

        1. 常规图片10年

        2. 广告图片1天

        3. 统计网站浏览工具禁止缓存

      语法: expires time;

    # 配置在server中location
    location ~.*.(gif|jpg|jpeg|png|bmp|swf)$ {
    expries 3650d;
    }
    location ~.*.(js|css)?$ {
    expries 30d;
    }
    # 这个时间点和服务时间对应,而不是客户端时候对应
    # 还可以控制目录,广告和其他不缓存的内容单独服务器 location ~^/(images|javascript|js|css|flash|media|static)/ { expires 360d; } # 这个()表示目录或者单个文件 / / 本身就包含一个路径

    9. 爬虫优化

      网站站点目录下写一个robots协议,告诉爬虫什么该爬什么不该爬,但这有个隐患,通过这个协议用户就知道了该网站重点站点目录,一个robots协议可以看出该网站设计和技术水准

    location ~(robots.txt) {
    log_not_found off;
    expires 7d;
    break;
    }
    # robots.txt 爬虫协议,告诉搜索引擎,可以抓取什么内容或禁止爬取什么内容
    # 这个文件在网站根目录下,这个也是网站优化的一个点,但是暴露网站重要目录结构
    # 用于打官司,robots协议必须清楚

      a. 限制爬虫策略

        www.baidu.com/robots.txt                  # 获得相关爬虫信息

        通过 http_user_agent 判断 useragent,限制爬虫某些访问,然后通过robots声明,添加在server中,返回403或者一个页面。

        access_log中有这么个字段http_user_agent

    server {
    listen 80;
    server_name 127.0.0.1;
    
    #添加如下内容即可防止爬虫
    if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot")
    {
    return 403;
    }
    # 但是有个问题,限制爬虫同时也干掉了SEO,不利于网站推广,择优考虑
    

      

    10. 日志优化

      不记录检查或者某些图片日志,无用日志占用大量资源

    location ~ .*(js|jpg|jpeg|JPEG|css|bmp|gif|GIF)$ {
    access_log off;
    }

    11. 最小化站点目录权限

      最不安全方式:

    chmod -R 777 /sitedir
    chown -R nginx.nginx /sitedir

           最安全的权限:

        1. 所有的站点目录的用户和组都应root

        2. 所有目录权限都是默认755

        3. 所有的文件权限都是默认644

        4. 网站服务软件运行的用户不能用root

      那,如何解决用户上传文件问题?

             动态的web集群和上传集群、浏览,程序分离独立分开,大网站

             小型网站,定义不同的虚拟机,然后授权不同的目录

    12. 最小化logs目录权限

    chmod -R 700 /nginx/logs
    chown -R root.root /app/logs
    # 其他人和组没有任何权限查看,只有root用户查看,因为Nginx的主进程是root用户
    # 就算把权限全部给root还是可以写日志

    13. Nginx页面错误优雅显示

      如 : 404 错误

        1. 创建 404.html放在站点目录下

        2. fastcgi_intercept_errors on;       # http中拦截错误信息

        3. error_page 404 /404.html          # sever中写入

    14. 使用tmpfs文件系统代替频繁访问的临时目录

    mount -t tmfs -o size=16m tmfs /tmp
    # size指定大小,看内存大小情况给,一般给2~4G,对于IO很高的临时文件,挂载到内存上
    # echo "mount -t tmfs -o size=16m tmfs /tmp" >> /etc/rc.local
    # 加入开机自启动
    # tail -1 /etc/rc.local
    # 检查
    

      

  • 相关阅读:
    JavaScript简单的日历
    CSS动画实现滚动播放
    视频弹窗自动播放 关闭停止
    简单通过js实现轮播图
    switch case的应用
    显示、隐藏
    .container的应用
    用CSS对HTML进行初始化设置
    CSS Id 和 Class选择器
    给文字添加阴影效果
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/8125342.html
Copyright © 2011-2022 走看看