一、連接數優化
當Nginx作為負載均衡服務器時,能夠接收的併發連接應該越多越好,為了測試服務器的併發能力,可以利用Apache中提供的ApacheBench工具,該工具可以在一臺計算機中向一個url地址發送大量的併發請求,檢查服務器響應這些請求耗時,有多少請求處理失敗,利用工具可以模擬一臺服務器被大量客戶端併發連接的情況,以測試服務器併發能力。
進入apache安裝目錄:
執行命令:./ab -n10 -c2 http://192.168.44.31/,注意ip後面有/;
從上述測試報告可以看出,服務器能承受500個併發連接,總共耗時0.085秒;
連接數設置到1500時,可以看出如上問題。
該提示表示打開的文件超出了系統限制,通過ulimit -a可以查看當前系統的限制:
從結果可以看出當前對於文件打開數量(open file)的限制為1024,使用命令:ulimit -n 65500命令可以臨時更改這個數量;
若要每次開機後自動修改,可以將命令寫入/etc/profile文件中。
重新請求結果如下:
優化Nginx連接數
為了使Nginx能夠承受更高的併發數,可以編輯conf/nginx.conf配置文件進行配置,具體如下:
上述配置中:
worker_processes指令用於指定工作進程的個數,設置為auto時Nginx將根據cpu的核心數來控制;
worker_rlimit_nofile用於設置最多打開的文件數量;
worker_connections用於設置每個工作進程可以接收的連接數;
multi_accept表示是否允許一個工作進程響應多個請求;
Nginx支持select,poll,kqueue,epoll等多種類型的連接處理方式,在默認情況下會自動選擇最適合系統的方式;
將錯誤日誌級別設置為info時,可以查看當前Nginx使用的方式
重啟併發請求可以看出Nginx完成了併發測試,沒有出現失敗的請求;
二、客戶端請求限制
限制同一個IP的併發數
通過limit_conn指令可以限制併發連接數,在conf/nginx.conf配置文件中進行如下配置:
limit_conn_zone指令用於開闢一個共享內存空間保存客戶端IP,空間名稱為perip,
空間大小為10M,limit_conn指令用於限制連接數量;
預定義變量$binary_remote_addr保存了用二進制表示的當前客戶端IP地址。
配置生效之後,Nginx將對於同一個IP地址允許10個併發連接,當超過時返回503錯誤,
另外limit_conn指令也可以在server和location塊中使用,用於實現不同級別的控制。
限制虛擬主機的併發數
限制響應的傳輸速度
三、瀏覽器緩存優化
在server模塊通過expires指令為靜態資源設置過期時間,將圖片,swf文件設置為30天后過期,將css,js文件設置為12個小時後過期。
另外即使服務器沒有設置Expires,瀏覽器也會基於常見的靜態資源擴展名自動緩存。
閱讀更多 JavaCodingfarmer 的文章