nginx优化

     nginx是俄罗斯编写的轻量级的http服务器。高性能的http和反向代理服务器,同时也是一个imap/pop3/smtp搭理服务器,nginx是由俄罗斯lgor sysoev为俄罗斯访问量第二的ramble.ru站点开发。

    nginx是轻量,开源,易用

    nginx以事件驱动的方式编写,有非常好的性能,同时也是一个非常高效的反向代理,负载均衡。不支持cgi方式运行,可以减少因此带来的一些程序上的漏洞,必须使用fastcgi方式来执行php程序。

编译安装前优化:

    编译前的优化主要用来修改程序名等等,目的更改源码隐藏软件名称和版本号。

      安装zlib-develpcre-devel依赖包

    wKiom1j5cmehWQBNAAAd83ErqCk840.png-wh_50

        yun-y install gcc gcc-c++ make libtool zlib zlib-devel pcre-devel opensslopenssl-devel

wKiom1j5ceHACj4DAAAW7qbmatg169.png-wh_50

解压源码包

        tar zxf nginx-1.10.2.tar.gz

         cdnginx-1.20.2/

           修改软件名称和版本号

    wKiom1j5db6hjCi6AAD_d1EDS88152.jpg-wh_50

            vim src/core/nginx.h

            #defineNGINX_VERSION         版本号

            #defineNGINX_VER         软件名称

        修改http头信息中的connection字段,防止回显具体版本号

            通过http头,通用头包含请求和响应消息都支持的头,通用头包含Cache-Control,Connectioin,Date,Pragma,Transfer-Encoding,Upgrade,Via。对通用头的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头,一般将会作为实体头处理,那么也就是说有部分设备,或者软件,能获取connection,部分不能。

    wKiom1j5eIaCd9ErAADSng8TvL4618.jpg-wh_50

        修改http错误码的返回

            我们程序页面出现错误,nginx会代我们返回相应的错误代码,回显时,会带上nginx和版本号。

    vim /usr/src/nginx-1.10.2/src/http/ngx_http_special_response.c

    wKioL1j5egXRfcxWAAB9r45KBTQ661.jpg-wh_50

    二,安装nginx

    wKioL1j5fhKTVJc4AAA6gGNWnD8178.jpg-wh_50

    编译安装nginx

    wKioL1j5gD2AYM_JAAFFKPSpMlw464.jpg-wh_50

        如果pcre是通过编译安装的话,则--with-pcre=/usr/local/src/pcre-8.26

    创建软连接

    wKiom1j5gTrjTvGjAABoAns6oH0574.jpg-wh_50

    启动nginx和查看端口号

    wKiom1j5gbHjEKvXAABES2pg-fo603.jpg-wh_50

    测试编译安装前的优化

    wKiom1j5g7nAD8iYAAEXc4x7Jtk580.jpg-wh_50

    可以了解master是管理员,work进程才是为用户提供服务

    wKiom1j5hEXhGFesAABEc_I5KAI165.jpg-wh_50

三,nginx的优化   

    1.nginx运行工作进程个数,设置cpu的核心或者核心数的二倍

    wKiom1j5hRSSG7erAAAmWWTL5hc340.jpg-wh_50

     vim /usr/local/nginx1.10/conf/nginx.conf

        worker_processes 4

    /usr/local/nginx1.10/sbin/nginx -s reload

    wKioL1j5hmGAqi_wAACQzZMc2Ko478.jpg-wh_50

    nginx运行cpu亲和力

        woker_cpu_affinity 01 10

    woker_processer最多开启8个,8个以上不再提升性能了,而且稳定性变得更低。

    nginx最多打开文件数

        woker_rlimit_nofile 65535

        当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数与nginx进程数相除。最好与ulimit -n的值保持一致。

    wKioL1j5iPrihT0jAAAo7Woi8Zw056.jpg-wh_50

        文件资源限制配置可以在/etc/security/limits.conf设置,针对root/user等各个用户或者*代表所有用户设置

    wKiom1j5i-fj75-QAAB1uHlVH1k263.jpg-wh_50

    2.nginx事件处理模型

        events {

            use epoll;

            worker_connection 65536;

            multi_accept on;

        nginx采用epoll事件模型,处理效率高

        work_connections是单个worker进程允许客户端最大连接数,这个数值一般根据服务器性能和内存限定,时间最大值就是worker进程数乘以work_connectioins

        multi_accept告诉nginx收到一个新连接通知后接受尽可能多的连接

        wKioL1j5j2nAvBTMAACOIxhgOp8351.jpg-wh_50

    3,开启高兴传输模式

       http {

            include mime,types;

            default_type application/octest-stream;

            ...

            sendfile on;

            tcp_nopush on;

            ... 

        include mime.types:媒体类型,incude只是在当前文件中包含另一个文件内容的指令

        default_type application/octer-stream:默认媒体类型足够

        tcp_nopush on:必须在sendfile开启模式才有效,防止网络阻塞,积极减少网络报文段的数量

        wKiom1j5kdPii_erAAFPH818DA0759.jpg-wh_50

    5,连接超时时间

        保护服务器资源,cpu,内存,控制连接数,建立连接也是需要消耗资源的

        keepalived_timeout 60;

        tcp_nodelay on;

        client_header_buffer_size 4k;

        open_file_cache max=102400 inactive=20s;

        open_file_cache_valid 30s;

        open_file_cache_min_uses 1;

        client_body_timeout 15;

        reset_timedout_connection on;

        send_timeout 15;

        server_tokens off;

        client_max_body_size 10m;

        wKioL1j5maSwrIEgAAIlVpOAwhk965.jpg-wh_50

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章