nginx 还是欢迎界面_初识Nginx性能安全优化
前言
最近小編的項目上線了官方網站,同大部分Web服務網站相同,小編項目的Web站采用了LNMP(Linux、Nginx、Mysql、PHP)架構。其中Nginx的作用是將靜態資源進行解析返回給用戶;動態資源通過FastCGI接口發送給PHP引擎服務,PHP進行讀庫解析,并最終把Nginx服務把獲取的數據返給用戶。
因為此Web站主要作用是協助運營同學推廣產品,所以除了最基本的網站頁面測試,Web頁面的性能、合理的服務器資源分配同時也是比較重要的需求。一方面,我們可以通過優化瀏覽器渲染、HTML文件格式、文本資源壓縮等方式提升頁面性能;一方面可以考慮優化Nginx的配置來增強其傳輸及并發支持能力。
方案一:配置Nginx gzip壓縮提升性能
Nginx gzip壓縮模塊提供了壓縮文件內容的功能,用戶請求的內容在發送到客戶端之前,Nginx服務器會根據一些具體的策略實施壓縮,以節約網站出口帶寬,同時加快數據傳輸效率,來提升用戶訪問體驗。
Nginx gzip壓縮特點
提升網站用戶體驗:發送給用戶的內容小了,用戶訪問單位大小的頁面就加快了,用戶體驗也就隨之提升。
節約網站帶寬成本:數據是壓縮傳輸的,因此節省了網站的帶寬流量成本,不過壓縮時會稍微消耗一些CPU資源,這個一般可以忽略。
參數配置
對應的參數配置解釋如下:
gzip on;
開啟gzip壓縮功能。
gzip_min_length lk;
設置允許壓縮的頁面最小字節數,頁面字節數從 header頭的 Content-Length中獲取。默認值是0,表示不管頁面多大都進行壓縮。建議設置成大于1K,
如果小于1K可能會越壓越大。
gzip_buffers 4 16k;
壓縮緩沖區大小。表示申請4個單位為16K的內存作為壓縮結果流緩存,默認值是申請與原始數據大小相同的內存空間來存儲gzip壓縮結果。
gzip_http_version 1.1;
壓縮版本(默認1.1,前端為 squid2.5時使用1.0),用于設置識別HTTP協議版本,默認是1.1,目前大部分瀏覽器已經支持G2IP解壓,使用默認即可。
gzip_comp_level 2;
壓縮比率。用來指定gzip壓縮比,1壓縮比最小,處理速度最快;9壓縮比最大,傳輸速度快,但處理最慢,也比較消耗CPU資源。
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml applicat ion/xml+rss;
用來指定壓縮的類型,除了“ text/html” 之外,還允許對指定的MIME類型進行gzipping響應。特殊值“*”匹配任何MIME類型(0.8.29)。
text/html始終壓縮具有“ ”類型的響應。
gzip_vary on;
vary header支持。該選項可以讓前端的緩存服務器緩存經過gzip壓縮的頁面,例如用Squid緩存經過 Nginx壓縮的數據。
實際參數優化配置如下:
gzip on;
gzip_min_length 1k;
gzip_buffers 4 32k;
gzip_comp_level 5;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
方案二:開啟高效文件傳輸模式
Nginx其實是存在高效模式的,如同顯卡和CPU我們可以通過超頻來榨干它們的性能,我們也可以開啟一些隱藏模式來提升Nginx的工作效率。
sendfile 參數用于開啟文件的高效傳輸模式。同時將tcp_nopush和tcp_nodelay兩個指令設置為on,可防止網絡及磁盤IO阻塞,實際提高性能。
sendfile on ;
tcp_nopush on;
tcp_nodelay on;
tcp_nopush 參數用于激活 Linux 上的 TCP_CORK socket 選項,此選項僅僅當開啟 sendfile 時才生效,tcp_nopush 參數可以允許把 http response header 和文件的開始部分放在一個文件里發布,以減少網絡報文段的數量
方案三:控制Nginx并發連接數量
我們可以通過限制每個key值的連接數,尤其是控制單個IP可連接數。此方法在服務器下載,限制每次訪問下載目錄的連接數尤其有效。對應配置為nginx_http_limit_conn_module。
實際配置文件如下:
[root@Nginx conf]# cat nginx.conf
worker_processes 4;
events {
worker_connections 20480;
}
http {
include mime.types;
server_tokens on;
sendfile on;
keepalive_timeout 65;
default_type application/octet-stream;
limit_conn_zone $binary_remove_addr zone=addr:10m; # 添加limit_conn_zone參數
server {
listen 80;
servername www.sogou.com;
location / {
root html;
index index.html index.htm;
limit_conn addr 1; # 設置單IP連接數為1
}
}
}
在客戶端使用ab測試工具進行測試:
ab -c 2 -n 10 http://127.0.0.1/
模擬并發連接2,訪問服務器10次,可看到狀態碼200和503間隔是1:1 說明nginx已經做了并發連接的限制,對超時連接做出了503響應。
結束語
在保障基本功能的同時優化前后端性能具有重要意義;產品的基礎是用戶體驗,如果脫離了快速、高效的用戶體驗,設計再為漂亮的界面也毫無意義。所以當我們在做需求的時候,除了基本的“測試保障”,同時也需要了解架構實現細節,優化安全與效率性,切實測出一個可用、平穩、高效的線上產品。
歡迎添加我們的搜狗測試微信號,與我們一起聊聊測試。
總結
以上是生活随笔為你收集整理的nginx 还是欢迎界面_初识Nginx性能安全优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 套接字没有连接并且没有提供地址_网络是怎
- 下一篇: 三菱plc编程实例3000_三菱PLC十