Nginx優化

Nginx實現連接超時

  • 在企業網站中,爲了避免同一個客戶長時間佔用連接,造成資源浪費,可設置相應的連接超時參數,實現控制連接訪問時間
  • 使用fiddler工具查看connection參數

超時參數

Keepalive_timeout
設置連接保持超時時間,一般可只設置該參數,默認爲65秒,可根據網站的情況設置,或者關閉,可在http段,server段,或者location段設置
Client_header_timeout
指定等待客戶端發送請求頭的超時時間
Client_body_timeout
設置請求體讀超時時間

修改配置文件

[root@localhost ~]# cd /usr/local/nginx/conf/  
[root@localhost conf]# vim nginx.conf    ##修改配置文件

#keepalive_timeout  0;
keepalive_timeout  65 180;     ##服務端和客戶端的超時時間
client_header_timeout 80;       ##請求頭部超時時間
client_body_timeout 80;          ##請求體超時時間

[root@localhost conf]# service nginx stop  ##關閉開啓服務
[root@localhost conf]# service nginx start 

Nginx運行進程數

  • 在高併發場景,需要啓動更多的Nginx進程以保證快速響應,以處理用戶的請求,避免造成阻塞
  • 可以使用ps aux命令查看Nginx運行進程的個數
  • 更改進程數的配置方法
    修改配置文件,修改進程配置參數
  • 修改配置文件的worker_process參數
    一般設爲CPU的個數或者核數
    在高併發情況下可設置爲CPU個數或者核數的2倍
  • 運行進程數多一些,響應訪問請求時,Nginx就不會臨時啓動新的進程提供服務,減少了系統的開銷,提升了服務速度
  • 使用ps aux查看運行進程數的變化情況
  • 默認情況,Nginx的多個進程可能跑在一個CPU上,可以分配不同的進程給不同的CPU處理,充分利用硬件多核多CPU
  • 在一臺4核物理服務器,可進行以下配置,將進程進行分配
    worker_cpu_affinity 0001 0010 0100 1000

1,查看當前的工作進程信息

[root@localhost ~]# ps aux | grep nginx  ##查看進程信息
root       7231  0.0  0.0  20548   620 ?        Ss   01:57   0:00 nginx: master process  ##主進程
nginx      7232  0.0  0.0  23076  1400 ?        S    01:57   0:00 nginx: worker process ##1個工作進程
root       7372  0.0  0.0 112728   972 pts/2    S+   02:07   0:00 grep --color=auto nginx

2,爲虛擬機添加CPU

Nginx優化

3,修改配置文件

[root@localhost ~]# cd /proc/
[root@localhost proc]# cat cpuinfo   ##查看cpu核心數
processor       : 0   ##第一個
...
processor       : 1   ##第二個
...
[root@localhost proc]# cd /usr/local/nginx/conf/
[root@localhost conf]# vim nginx.conf   ##修改配置文件

#user  nobody;
worker_processes  2;    ##核心數爲2
worker_cpu_affinity 01 10;   ##進程分配

4,查看工作進程

[root@localhost conf]# ps aux | grep nginx   ##查看Nginx進程信息
nginx  2329  0.0  0.0  23076  1392 ?    S  20:12   0:00 nginx: worker process 
##此時是兩個工作進程
nginx   2330  0.0  0.0  23076  1384 ?   S  20:12   0:00 nginx: worker process

Nginx實現網頁壓縮功能

  • Nginx的ngx_http_gzip_module壓縮模塊提供對文件內容壓縮的功能
  • 允許Nginx服務器將輸出內容在發送客戶端之前進行壓縮,以節約網站帶寬,提升用戶的訪問體驗,默認已經安裝
  • 可在配置文件中加入相應的壓縮功能參數對壓縮性能進行優化

壓縮功能參數

  • gzip on:開啓gzip壓縮輸出
  • gzip_min_length 1k:用於設置允許壓縮的頁面最小字節數
  • gzip_buffers 4 16k:表示申請4個單元爲16k的內存作爲壓縮結果流緩存,默認值是申請與原始數據大小相同的內存空間來存儲gzip壓縮結果
  • zip_http_version 1.0:用於設置識別http協議版本,默認是1.1,目前大部分瀏覽器已經支持gzip解壓,但處理最慢,也比較消耗服務器CPU資源
  • gzip_comp_level 2:用來指定gzip壓縮比,1壓縮比最小,處理速度最快;9壓縮比最大,傳輸速度快,但處理速度最慢,使用默認即可
  • gzip_types text/plain:壓縮類型,是就對那些網頁文檔啓用壓縮功能
  • gzip_vary on:選項可以讓前端的緩存服務器緩存經過gzip壓縮的頁面

實驗環境

Linux服務器(192.168.13.142)
一臺win10測試機

1,修改配置文件添加壓縮模塊內容

[root@localhost ~]# cd /usr/local/nginx/conf/
[root@localhost conf]# vim nginx.conf   ##修改配置文件
        #gzip  on;   ##開啓gzip壓縮功能(暫時不開啓)
        gzip_min_length 1k;      ##壓縮閥值
        gzip_buffers 4 16k;        ##buffer 大小爲4個16k緩衝區大小
        gzip_http_version 1.1;   ##壓縮版本
        gzip_comp_level 6;       ##壓縮比率,5,6適中
        gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg
 image/png image/gif application/xml text/javascript application/x-httpd-php app
lication/javascript application/json;
    ##支持的類型格式
        gzip_disable "MSIE [1-6]\.";   ##禁用gzip條件,支持正則,表示ie6以下不啓用gzip
        gzip_vary on;     ##讓前端的緩存服務器緩存經過gzip壓縮的頁面

2,在網頁站點中插入圖片

[root@localhost html]# mount.cifs //192.168.100.3/LAMP-C7 /mnt   ##掛載共享
Password for root@//192.168.100.3/LAMP-C7:  
[root@localhost html]# ls /mnt
apr-1.6.2.tar.gz                  Discuz_X2.5_SC_UTF8.zip  LAMP-php5.6.txt
apr-util-1.6.0.tar.gz             error.png                mysql-5.6.26.tar.gz
awstats-7.6.tar.gz                httpd-2.4.29.tar.bz2     nginx-1.12.0.tar.gz
cronolog-1.6.2-14.el7.x86_64.rpm  kali.jpg                 php-5.6.11.tar.bz2
[root@localhost html]# cp /mnt/11.png ./    ##將圖片複製到站點中
[root@localhost html]# vim index.html       ##將圖片放到網頁中

<h1>Welcome to nginx!</h1>
<img src="11.jpg"/>   ##添加圖片

[root@localhost html]# service nginx stop   ##關閉開啓Nginx服務
[root@localhost html]# service nginx start 
[root@localhost html]# systemctl stop firewalld.service ##關閉防火牆
[root@localhost html]# setenforce 0

3,查看網頁信息,並用fiddler抓包

Nginx優化
Nginx優化

4,開啓gzip壓縮功能

[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf  ##修改配置文件
gzip  on;   ##開啓壓縮功能
[root@localhost html]# service nginx stop  ##關閉和開啓Nginx服務
[root@localhost html]# service nginx start 

5,查看網頁,並用fiddler抓包查看壓縮情況

Nginx優化

Nginx實現防盜鏈

在企業網站服務中,一般都要配置防盜鏈功能,以避免網站內容被非法盜用,以造成經濟損失
Nginx防盜鏈功能也非常強大。默認情況下,只需要進行簡單的配置,即可實現防盜鏈處理

實驗環境

一臺Linux服務器(192.168.13.142)
一臺win7盜鏈網站(192.168.13.135)
一臺win10測試機

一,在win7盜鏈網站中創建一個盜鏈的網頁

1,用文本創建一個網頁內容,修改後綴爲index.html

<html>
 <head>
     <title>雲計算</title>
 </head>
 <body>
     <h1>this is test web</h1> 
     <img src="http://www.kgc.com/11.jpg"/>    ##盜鏈的圖片
 </body>
</html>

2,搭建web網站,指定DNS服務器地址(192.168.13.142)

Nginx優化
Nginx優化
Nginx優化
Nginx優化

3,安裝dns服務器

[root@localhost html]# yum install bind -y  ##安裝dns
[root@localhost html]# vim /etc/named.conf 
options {
                                listen-on port 53 { any; };          ##監聽所有
                                listen-on-v6 port 53 { ::1; };
                                directory       "/var/named";
                                dump-file       "/var/named/data/cache_dump.db";
                                statistics-file "/var/named/data/named_stats.txt";
                                memstatistics-file "/var/named/data/named_mem_stats.txt";
                                recursing-file  "/var/named/data/named.recursing";
                                secroots-file   "/var/named/data/named.secroots";
                                allow-query     { any; };           ##允許所有
[root@localhost html]# vim /etc/named.rfc1912.zones    ##配置區域配置文件
zone "kgc.com" IN {
                                type master;
                                file "kgc.com.zone";                ##kgc區域數據配置文件
                                allow-update { none; };                  
};
[root@localhost html]# cd /var/named/  
[root@localhost named]# cp -p named.localhost kgc.com.zone    ##複製模板
[root@localhost named]# vim kgc.com.zone    ##修改區域配置文件

$TTL 1D
@       IN SOA  @ rname.invalid. (
                                                        0       ; serial
                                                        1D      ; refresh
                                                        1H      ; retry
                                                        1W      ; expire
                                                        3H )    ; minimum
                                NS      @
                                A       127.0.0.1
www IN  A       192.168.13.142     ##本機地址
[root@localhost named]# systemctl start named      ##開啓dns服務
[root@localhost named]# systemctl stop firewalld.service    ##關閉防火牆
[root@localhost named]# setenforce 0

4,用測試機訪問盜鏈網站,原網站

Nginx優化
Nginx優化

5,修改配置文件,開啓防盜鏈功能

[root@localhost named]# vim /usr/local/nginx/conf/nginx.conf
##在server段插入防盜鏈配置
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
                root   html;
        }

        location ~*\.(jpg|gif|swf)$ {     ##支持格式
                        valid_referers none blocked *.kgc.com kgc.com;   ##允許kgc.com爲後綴訪問
                        if ( $invalid_referer ) {
                                rewrite ^/ http://www.kgc.com/error.png;  ##不是則發送錯誤圖片
                        }
        }
[root@localhost named]# cp /mnt/error.png /usr/local/nginx/html/   ##將防盜鏈圖片放到站點中
[root@localhost named]# service nginx stop   ##關閉開啓Nginx服務
[root@localhost named]# service nginx start 

6,利用測試機訪問盜鏈網站

Nginx優化

對FPM模塊進行參數優化

  • Nginx的PHP解析功能實現如果是交由FPM處理的,爲了提高PHP的出來速度,可對FPM模塊進行參數的調整
  • FPM模塊參數調整,要根據服務器的內存與服務器負載進行調整
  • 啓動fpm進程方式
    static:將產生固定數量的fpm進程
    dynamic:將以動態的方式產生fpm進程
    通過pm參數指定

FPM優化參數

  • static的方式的參數
    pm.max_children:指定啓動的進程數量
  • Dynamic方式的參數
    pm.max_children:指定啓動的進程數量最大的數量
    pm.start_servers:動態方式下初始的fpm進程數量
    pm.min_spare_servers:動態方式下最小的fpm空閉進程數
    pm.max_spare_servers:動態方式下最大的fpm空閉進程數

FPM優化參數調整

優化原因:服務器爲雲服務器,運行了個人論壇,內存爲1.5G,fpm進程數爲20,內存消耗近1G,處理比較慢
優化參數調整:FPM啓動時有5個進程,最小空閒2個進程,最大空閒8個進程,最多可以有20個進程存在

謝謝閱讀!

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