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

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