【編者按】本文主要介紹 NGINX 的主要功能以及如何經過 Nginx 優化 Python 應用性能。本文系國內 ITOM 管理平臺 OneAPM 編譯呈現。html
本文上一篇系: 利用 NGINX 最大化 Python 性能,第一部分:Web 服務和緩存。python
Python 以其高性能腳本語言而著稱,而 NGINX 則可以經過增長代碼的實際執行速度來提供助力。對於單一服務器來講,若是網頁的一半由靜態文件組成(不少網頁都有一半由靜態文件組成),增長靜態文件緩存可以使這類網頁性能翻倍,緩存動態應用程序內容可以進一步提高應用程序性能。nginx
但這種方法並非對全部應用都受用,或者說提高的性能不足夠。這時就要考慮橫向擴展了---遷移到多服務器應用。多服務器應用不只功能強大、使用靈活、幾乎可以無限擴展,並且成本較低。讓咱們繼續前面的優化 Python 性能。緩存
##技巧 6---將 NGINX 做爲反向代理服務器 從單服務器環境來說,部署反向代理服務器彷佛是個很大的進步,由於這一部署很是簡單,實現的功能卻至關強大。添加反向代理服務器後,不只性能當即獲得大幅提高,還有機會實現:服務器
##技巧 7---重寫 URL Web 服務器配置一般包括 URL 重寫規則。你能夠製做美觀的 URL 方便用戶理解,也可讓 URL 在資源遷移後仍然不變。網絡
NGINX 配置(包括重寫 URL)使用的指令數量較少,也被衆多人士認爲是簡單明瞭。但若是不熟悉,使用前仍是要經歷一個學習過程。能夠把 Creating NGINX Rewrite Rules 這篇文章當作介紹。負載均衡
下面給出一個使用重寫指令的 NGINX 重寫規則樣板。此規則查找了以 /download
開頭的 URL,以後還在路徑中包含 /media/
或 /audio/
目錄。此規則用 /mp3/
替換這些元素,並增長合適的文件擴展名 .mp3
或 .ra
。變量 (1 和 )2 獲取保持不變的路徑元素。例如,/download/cdn-west/media/file1
變成 /download/cdn-west/mp3/file1.mp3
。工具
server { ... rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last; rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last; return 403; ... }
要在 NGINX 中實現相似 Apache 的效果,你能夠在第一個服務器塊中匹配短 URL 的請求,而後把它們重定向到匹配長 URL 的第二個服務器塊。性能
# USE THIS CONVERSION server { listen 80; server_name example.org; return 301 http://www.example.org$request_uri; } server { listen 80; server_name www.example.org; ... }
##技巧 8---實施負載均衡 擴充網站容量、提升網站可用性的終極辦法就是運行多臺應用程序服務器並實施負載均衡。學習
配備 NGINX 的負載均衡 PHP 服務器,要實現 NGINX 負載均衡,首先用你須要均衡的各個服務器來建立一個服務器羣組。而後編寫配置代碼,代碼包括服務器權重---若是服務器的處理能力較強,請給它分配較大的權重,給它送去更多流量。
upstream stream_backend { server backend1.example.com:12345 weight=5; server backend2.example.com:12345; server backend3.example.com:12346; }
##技巧 9---啓用會話持續性和會話耗盡 網絡默認用於無狀態交互;若是須要特定狀態的信息,能夠經過若干方法來實施。若是狀態位於應用程序服務器上,就得讓這臺服務器在會話期間處理指定用戶的全部請求,這就叫作會話持續。
要管理多個負載均衡的服務器,會話耗滿是一項有效工具。利用 NGINX Plus在一臺服務器上的上游羣組中設置耗盡參數,NGINX Plus 會讓這臺服務器放鬆下來,不會給它發送新的請求,而是讓現有鏈接繼續下去,直到會話結束。
##技巧 10---啓用監控和管理功能 若是服務器配置較爲複雜,在保持高性能和避免宕機時,監測和管理就變得尤爲重要。監控 NGINX 狀態頁,在服務器可能遇到麻煩時通知用戶,讓用戶監測本身的系統,根據信息在問題發生前採起行動。
NGINX 提供了一個內置控制面板來監測 NGINX 服務器的健康情況。你能夠收集 NGIGX 面板數據肯定每臺特定服務器是否有問題。
##結論 Python 建立的網站要可以同時吸引衆多用戶,那就須要強大的性能支持,若是你採用的是 Nginx 作 Web 服務器,能夠從上面10個方面來優化性能。
OneAPM 可以幫你實現 Python 應用層面代碼級監控,也可以實現 Nginx 等基礎組件等監控。想閱讀更多技術文章,請訪問 OneAPM 官方技術博客。
本文轉自 OneAPM 官方博客
原文地址:Maximizing Python Performance with NGINX, Part II: Load Balancing and Monitoring