• Nginx.conf配置文件参数说明与优化


    参考连接:nginx 核心配置优化详解

    先说下优化

    1、nginx运行工作进程个数

    worker_processes  1;

    Nginx进程,一般设置为和cpu核数一样(nginx启动后有多少个worker处理http请求)(worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。)

    2、nginx工作进程最大打开文件数

    worker_rlimit_nofile 65535;

    一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致

    3、使用epoll事件驱动

      use epoll;

    使用epoll的I/O模型,epoll:I/O多路复用,使用于Linux内核2.6版本及以后的系统。

    4、配置单个工作进程的最大连接数

    worker_connections  1024;

    单个后台worker process进程的最大并发链接数,值不能大于操作系统能打开的最大的文件句柄数,使用ulimit -n可以查看当前操作系统支持的最大文件句柄数,默认为为1024.

    5、网络连接的优化

    accept_mutex on;

    多个Worker将以串行方式来处理,其中有一个Worker会被唤醒,其他的Worker继续保持休眠状态,多个Worker将以串行方式来处理,其中有一个Worker会被唤醒,其他的Worker继续保持休眠状态,但是如果你的网站访问量比较大,为了系统的吞吐量,我还是建议大家关闭它。

    6、设置是否允许同时接受多个网络连接

    multi_axccept on;

    设置是否允许同时接收多个网络连接,Nginx在已经得到一个新连接的通知时,接收尽可能更多的连接。

    7、隐藏ngxin版本号

    server_tokens off; #在http 模块当中配置

    当前使用的nginx可能会有未知的漏洞,如果被黑客使用将会造成无法估量的损失

    8、开启高效文件传输模式

    sendfile on;

    sendfile参数用于开启文件的高效传输模式,同时将tcp_nopush和tcp_nodelay两个指定设为on,可防止网络及磁盘I/O阻塞,提升Nginx工作效率。

    更多内容可以参考:Nginx性能优化  和 Nginx配置项优化详解

    配置详细说明
    #定义Nginx运行的用户和用户组
    user www;
     
    #nginx进程数,建议设置为等于CPU总核心数。
    worker_processes 8;
     

    // nginx错误日志配置 -- 生产场景一般是 warn | error | crit 这三个级别之一
    #error_log logs/error.log; // 默认值:error
    #error_log logs/error.log notice;
    #error_log logs/error.log info;


     
    #进程pid存放位置
    pid ar/runinx.pid;
     
    #一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。
    worker_rlimit_nofile 65535;
     
    #工作模式与连接数上限
    events
    {
        #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
        use epoll;
        #单个进程最大连接数(最大连接数=连接数*进程数)
        worker_connections 65535;

     client_header_buffer_size 4k; // 客户端请求头部的缓冲区大小,根据你的系统分页大小来设置

     accept_mutex on; // 多个Worker将以串行方式来处理,其中有一个Worker会被唤醒,其他的Worker继续保持休眠状态,多个Worker将以串行方式来处理,其中有一个Worker会被唤醒,其他的Worker继续保持休眠状态,但是如果你的网站访问量比较大,为了系统的吞吐量,我还是建议大家关闭它。

     multi_axccept on/off; // 设置是否允许同时接收多个网络连接,Nginx在已经得到一个新连接的通知时,接收尽可能更多的连接。
    }
     
    #设定http服务器
    http
    {
        include mime.types; #文件扩展名与文件类型映射表
        default_type application/octet-stream; #默认文件类型
        #charset utf-8; #默认编码
        server_names_hash_bucket_size 128; #服务器名字的hash表大小
        client_header_buffer_size 32k; #// 客户端请求头部的缓冲区大小,根据你的系统分页大小来设置
        large_client_header_buffers 4 64k; #客户端请求头部的缓冲区的最大数量和大小。
        client_max_body_size 8m; #设此指令设置NGINX能处理的最大请求主体大小。 如果请求大于指定的大小,则NGINX发回HTTP 413(Request Entity too large)错误。 如果服务器处理大文件上传,则该指令非常重要。
        sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
        autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
        tcp_nopush on; #防止网络阻塞
        tcp_nodelay on; #防止网络阻塞
        keepalive_timeout 120; #长连接超时时间,单位是秒
        
        #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 128k;
        
        #gzip模块设置
        gzip on; #开启gzip压缩输出
        gzip_min_length 1k; #最小压缩文件大小
        gzip_buffers 4 16k; #压缩缓冲区
        gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
        gzip_comp_level 2; #压缩等级
        gzip_types text/plain application/x-javascript text/css application/xml;
        #压缩类型,默认就已经包含textml,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
        gzip_vary on;
        #limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用
        

      #常规
        upstream blog.linuxidc.com {
            #upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。

      #轮询(默认, 每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询。)

      #ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题。 


            server 192.168.80.121:80 weight=3;
            server 192.168.80.122:80 weight=2;
            server 192.168.80.123:80 weight=3;
        }

      #配合下面的反向代理(与上面的常规 2选1)

      upstream mysvr {
            #weigth参数表示权值,权值越高被分配到的几率越大
            #本机上的Squid开启3128端口
            server 192.168.8.1:3128 weight=5;
            server 192.168.8.2:80  weight=1;
            server 192.168.8.3:80  weight=6;
        }


        
        #虚拟主机的配置(一)
        server
        {
            #监听端口
            listen 80;
            #域名可以有多个,用空格隔开
            server_name www.linuxidc.com ha97.com;
            index index.html index.htm index.php;
            root /data/www/linuxidc;
            location ~ .*.(php|php5)?$
            {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                include fastcgi.conf;
            }
            #图片缓存时间设置
            location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
            {
                expires 10d;
            }
            #JS和CSS缓存时间设置
            location ~ .*.(js|css)?$
            {
                expires 1h;
            }
            #日志格式设定
            log_format access '$remote_addr - $remote_user [$time_local] "$request" '
            '$status $body_bytes_sent "$http_referer" '
            '"$http_user_agent" $http_x_forwarded_for';
            #定义本虚拟主机的访问日志
            access_log ar/loginx/linuxidcaccess.log access;
        
            #对 "/" 启用反向代理
            location / {
                proxy_pass http://127.0.0.1:88;
                proxy_redirect off;
                proxy_set_header X-Real-IP $remote_addr;
                #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                #以下是一些反向代理的配置,可选。
                proxy_set_header Host $host;
                client_max_body_size 10m; #允许客户端请求的最大单文件字节数
                client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
                proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
                proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
                proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
                proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
                proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
                proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
                proxy_temp_file_write_size 64k;
                #设定缓存文件夹大小,大于这个值,将从upstream服务器传
            }
        
            #设定查看Nginx状态的地址
            location /NginxStatus {
                stub_status on;
                access_log on;
                auth_basic "NginxStatus";
                auth_basic_user_file confpasswd;
                #htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
            }
            
            #本地动静分离反向代理配置
            #所有jsp的页面均交由tomcat或resin处理
            location ~ .(jsp|jspx|do)?$ {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://127.0.0.1:8080;
            }
            #所有静态文件由nginx直接读取不经过tomcat或resin
            location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
            { 
                expires 15d; 
            }
            
            location ~ .*.(js|css)?$
            { 
                expires 1h; 
            }
        }
        
        #虚拟主机的配置(二)

        server {
            #侦听192.168.8.x的80端口
            listen       80;
            server_name  192.168.8.x;
    
            #对aspx后缀的进行负载均衡请求
            location ~ .*.aspx$ {
                root   /root;#定义服务器的默认网站根目录位置
                index index.php index.html index.htm;#定义首页索引文件的名称
    
                proxy_pass  http://mysvr;#请求转向mysvr 定义的服务器列表
    
                #以下是一些反向代理的配置可删除.
                proxy_redirect off;
    
                #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                client_max_body_size 10m;    #允许客户端请求的最大单文件字节数
                client_body_buffer_size 128k;  #缓冲区代理缓冲用户端请求的最大字节数,
                proxy_connect_timeout 90;  #nginx跟后端服务器连接超时时间(代理连接超时)
                proxy_send_timeout 90;        #后端服务器数据回传时间(代理发送超时)
                proxy_read_timeout 90;         #连接成功后,后端服务器响应时间(代理接收超时)
                proxy_buffer_size 4k;             #设置代理服务器(nginx)保存用户头信息的缓冲区大小
                proxy_buffers 4 32k;               #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
                proxy_busy_buffers_size 64k;    #高负荷下缓冲大小(proxy_buffers*2)
                proxy_temp_file_write_size 64k;  #设定缓存文件夹大小,大于这个值,将从upstream服务器传
            }
        }

    }

    关于上面http配置中有些选项的说明:

    keepalived_timeout客户端连接保持会话超时时间,超过这个时间,服务器断开这个链接

    tcp_nodelay;也是防止网络阻塞,不过要包涵在keepalived参数才有效

    client_header_buffer_size 4k;
    客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过 1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
    open_file_cache max=102400 inactive=20s;
    这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件
    数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
    open_file_cache_valid 30s;
    这个是指多长时间检查一次缓存的有效信息。
    open_file_cache_min_uses 1;
    open_file_cache指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文
    件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除。

    client_header_timeout设置请求头的超时时间。我们也可以把这个设置低些,如果超过这个时间没有发送任何数据,nginx将返回request time out的错误

    client_body_timeout设置请求体的超时时间。我们也可以把这个设置低些,超过这个时间没有发送任何数据,和上面一样的错误提示

    reset_timeout_connection 告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。

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

    server_tokens  并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。

    client_max_body_size上传文件大小限制

    关于fastcgi的

    fastcgi_connect_timeout 600; #指定连接到后端FastCGI的超时时间。

    fastcgi_send_timeout 600; #向FastCGI传送请求的超时时间。

    fastcgi_read_timeout 600; #指定接收FastCGI应答的超时时间。

    fastcgi_buffer_size 64k; #指定读取FastCGI应答第一部分需要用多大的缓冲区,默认的缓冲区大小为fastcgi_buffers指令中的每块大小,可以将这个值设置更小。

    fastcgi_buffers 4 64k; #指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求,如果一个php脚本所产生的页面大小为256KB,那么会分配4个64KB的缓冲区来缓存,如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp_path指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于磁盘。一般这个值应该为站点中php脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“8 32K”、“4 64k”等。

    fastcgi_busy_buffers_size 128k; #建议设置为fastcgi_buffers的两倍,繁忙时候的buffer

    fastcgi_temp_file_write_size 128k;  #在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍,该数值设置小时若负载上来时可能报502BadGateway

    fastcgi_temp_path #缓存临时目录

    fastcgi_intercept_errors on;#这个指令指定是否传递4xx和5xx错误信息到客户端,或者允许nginx使用error_page处理错误信息。

    注:静态文件不存在会返回404页面,但是php页面则返回空白页!!

    fastcgi_cache_path /usr/local/nginx1.10/fastcgi_cachelevels=1:2 keys_zone=cache_fastcgi:128minactive=1d max_size=10g;# fastcgi_cache缓存目录,可以设置目录层级,比如1:2会生成16*256个子目录,cache_fastcgi是这个缓存空间的名字,cache是用多少内存(这样热门的内容nginx直接放内存,提高访问速度),inactive表示默认失效时间,如果缓存数据在失效时间内没有被访问,将被删除,max_size表示最多用多少硬盘空间。

    fastcgi_cache cache_fastcgi;  #表示开启FastCGI缓存并为其指定一个名称。开启缓存非常有用,可以有效降低CPU的负载,并且防止502的错误放生。cache_fastcgi为proxy_cache_path指令创建的缓存区名称

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

    fastcgi_cache_valid 301 1d;     #将301应答缓存一天

    fastcgi_cache_valid any 1m;     #将其他应答缓存为1分钟

    fastcgi_cache_min_uses 1;       #该指令用于设置经过多少次请求的相同URL将被缓存。

    fastcgi_cache_key http://$host$request_uri; #该指令用来设置web缓存的Key值,nginx根据Key值md5哈希存储.一般根据$host(域名)、$request_uri(请求的路径)等变量组合成proxy_cache_key 。

    fastcgi_pass #指定FastCGI服务器监听端口与地址,可以是本机或者其它

    关于更多的关于缓冲区的参数介绍,参考此链接:缓冲区参数介绍

  • 相关阅读:
    微软ASP.NET网站部署指南(4):配置项目属性
    iOS 设计模式之抽象工厂
    How can I move a MySQL database from one server to another?
    CentOS 7 上安装vim(默认未安装)
    How to resize slide dimensions without resizing any objects on the slide?
    CentOS 7.3 上安装docker
    美国留学访学(访问学者)必备信用卡
    西安理工大学税务登记证、银行账号信息
    Oracle联合多个子查询(inner join)
    linux tail
  • 原文地址:https://www.cnblogs.com/chenhaoyu/p/8899957.html
Copyright © 2020-2023  润新知