nginx網站架構優化思路(原)

来源:http://www.cnblogs.com/dragonflyer/archive/2017/01/08/6261957.html
-Advertisement-
Play Games

本人接觸的優化主要分為三大類 黑體的為本模塊下的重點 安全優化 安全在生產場景中是第一位的 1.1 站點目錄許可權的優化 (修改許可權755 644 所屬用戶root,需要上傳的目錄給予nginx許可權) 1.2 防盜連接的優化(通過$http_referer實現判斷用戶來源,對非法的referer 返回 ...


本人接觸的優化主要分為三大類 黑體的為本模塊下的重點

 ---------------安全優化

安全在生產場景中是第一位的

1.1 站點目錄許可權的優化 (修改許可權755 644 所屬用戶root,需要上傳的目錄給予nginx許可權

1.2 防盜連接的優化(通過$http_referer實現判斷用戶來源,對非法的referer 返回錯誤代碼)這一點如果沒做 站點流量會上升(幫別人做廣告),可能會給公司造成而外的經濟損失

1.3 日誌許可權的優化,日誌許可權不要給nginx用戶,日誌是分析問題和數據的重要文件,安全必須考慮

1.4 重要目錄遷移或者用目錄訪問控制用(allow,deny實現)例如配置文件或者程式安裝目錄

1.5 上傳目錄下禁止動態程式的解析(例如static目錄下禁止運行擴展名為php py pl sh的文件)防止木馬程式上傳之後運行

1.6 防止功能變數名稱惡意解析(建立預設ip訪問規則),即當用戶直接用ip訪問的時候 我們返回501錯誤  類似jd taobao(實現方法建立一個default.conf 配置預設返回501

1.7 為nginx降權 實現普通用戶啟動管理nginx服務

1.8 隱藏nginx版本 通過server_tokens off實現 很基本

1.9 站點防止爬蟲優化 可以在站點 根目錄下建立robots.txt 告知相應的防止爬蟲優化,然後通過nginx的http_user_agent 參數實現訪問控制

 

 -----------------性能優化

性能和安全是互為負相關的方面 最好取其平衡

 

2.1    日誌優化 在真是rs伺服器上關閉靜態資源日誌記錄的功能(l例如jpg css js等)如果併發很大的情況下 要關閉真實伺服器的日誌記錄功能 ,因為日誌記錄消耗資源io很明顯 在負載均衡上開啟日誌記錄即可。

2.2    配置主要標簽的worker_processes數量 根據cpu核數 確定一般是1:1 對多不超過二倍

2.3    配置cpu親和力worker_cpu_affinity 平均分配cpu資源

2.4    配置worker打開的文件數量 worker_rlimit_nofile

2.5    配置event 標簽 調整連接數worker_connections 生產場景一般為4096

2.6    開啟高效傳輸模式 sendfile on

2.7    開啟資源壓縮 gzip on (gzip_comp_level 6 gzip_min_length gzip_types gzip_http_version gzip_buffers )可以通過yslow 瀏覽器插件檢查站點是否啟用壓縮

2.8    開啟緩存 expires 一般在靜態資源下開啟緩存功能 例如圖片 css (expires 365d,經常變換的圖片或者資源要儘量改的時間短一點,因為有些東西不希望到的是未更新的 例如廣告

2.9    fastcgi相關參數的優化,以及基於內核的參數優化 sysctl.conf

 

  -------------------架構優化

架構優化的目的是綜合提升性能和安全

實現原理是把不同的資源(通過擴展名實現)進行拆分,不同的訪問進行拆分(通過url實現)也可以叫做解耦,通過這樣操作可以提升靜態資源的訪問效率

 

3.1通過nginx的代理功能對有固定功能變數名稱的資源 進行不同伺服器的指向 把動態靜態資源分不同的upstream訪問 這樣靜態資源伺服器上不用安裝相應的動態資源解析程式 例如tomcat 和php  一般大公司會選擇這樣的方案 例如淘寶圖片伺服器 static.taobao.com等等

配置案例

server {

        listen       80;

        server_name  dynamic.wanda.cn;

        location / {

                proxy_pass http://dynamic_pool;

           

        }

}

 

server {

        listen       80;

        server_name  static.wanda.cn;

        location / {

                proxy_pass http://static_pool;

        }

}

3.2如果站點沒有實現動靜資源功能變數名稱獨立 那麼可以通過nginx的基於目錄和擴展名的的proxy_pass 進行動態靜態 資源的不同伺服器rs節點的指向 。這一點是中小企業方案

server {

           listen 80;

           server_name www.wanda.cn;

location /static {

        proxy_pass http://image_pool;

        }

           location / {  #預設包含了動態和靜態

                    proxy_pass http://dynamic_pool;

}

}

3.3 如果條件准許,最好在nginx代理上面加上proxy_cache的功能 緩存rs節點的靜態資源,減少對rs後端的請求,相同的資源 減少請求 就提升了性能

   簡單介紹一下nginx_cache的實現思路:

 

   首先在nginx代理伺服器上 建立一個目錄 (掛載到記憶體下麵的 tmpfs格式文件系統)

   mount -t tmpfs tmpfs /tmp

   然後,在nginx的http標簽內 添加以下參數 告知nginx代理 緩存的路徑在哪 緩存的zone名稱是什麼 我們的名字就叫cache 大小為64m緩存

proxy_cache_path /tmp levels=1:2 keys_zone=cache:64m;

在server標簽下  加入以下紅色內容

    server {

        listen       80;

        server_name  www.wanda.cn;

        location / {

                proxy_pass http://dynamic_pool;

                proxy_cache cache;

        }

}

重啟nginx -s reload

 

重新訪問以下站點目錄 帶有圖片的網頁 然後可以看到/tmp目錄下生成了緩存文件  ,通過配置 日誌參數 添加 $upstream_cache_status 再次訪問 可以檢測是否去使用了緩存 如果狀態為hit說明命中 配置成功

 

 

好了 總結了一個多小時 關於nginx優化如果大家有更好的方法 歡迎一起探討

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 自增和自減運算 自增和自減運算 比較運算符與比較表達式 比較運算符與比較表達式 邏輯運算符與邏輯表達式 邏輯運算符與邏輯表達式 IF結構 IF結構 變數的作用域 變數的作用域 ...
  • 當應用伺服器受到攻擊,我們採取的措施大致分為以下幾個步驟: 1、伺服器隔離 檢查埠,禁掉網卡 2、修改賬號、密碼,防火牆策略等 3、殺毒 4、應用重新部署 當然,這些工作大部分是由伺服器維護人員來做,對於我們開發人員來說,也是可以貢獻自己一份力量的, 比如部署應用配置項的時候資料庫連接採用加密手段 ...
  • twemproxy概述 twemproxy是搭建分散式緩存集群的重要組件之一。他能將來自客戶端的redis包通過key分片發送到不同的redis伺服器,而不是發到單個redis伺服器上。因此,可以使本來集中到一個redis上的信息被分流到幾個redis上,這就使得 twemproxy能支持redis ...
  • 本文地址 分享提綱: 1. 概述 2. 詳解配置文件 3. 詳解日誌 1.概述 MySQL配置文件在Windows下叫my.ini,在MySQL的安裝根目錄下;在Linux下叫my.cnf,該文件位於/etc/my.cnf。 2. 詳解配置文件 basedir = path 使用給定目錄作為根目錄( ...
  • MySQL 約束 作用:保證數據的完整性和一致性按照約束的作用範圍分為:表級約束和行級約束。常見的約束類型包括: Not null(非空約束) Primary key (主鍵約束) Unique key(唯一約束) Default (預設約束) foreign key(外鍵約束) 外鍵約束 1.父表 ...
  • 最近在學習linux,在某個用戶(xxx)下使用sudo的時候,提示以下錯誤:xxx is not in the sudoers file. This incident will be reported。 百度了下,究其原因是用戶沒有加入到sudo的配置文件里。 解決方法如下: 1、切換到root用 ...
  • 第八節 Linux 文件的屬性(下半部分) 標簽(空格分隔): Linux教學筆記 [更多相關資料請點我查看][1] 第1章 鏈接的概念 在linux系統中,鏈接可分為兩種:一種為硬鏈接(Hard Link),另一種為軟連接或符號鏈接(Symbolic Link or Soft link)。我們在前 ...
  • 一.以查詢方式實現 1.寫出驅動框架 1.1 仿照其他程式加一些必要的頭文件 1.2 構造一個結構體file_operations 1.3 根據file_operations的所選項寫出所需的函數,並構建出來 1.4 入口函數、出口函數的註冊和卸載 1.5 修飾入口函數和出口函數 1.6 給sysf ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...